diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9e369b4cb..b219cc728 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -54,6 +54,7 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout-finger/order_power_widget_buttons_activity.xml b/res/layout-finger/order_power_widget_buttons_activity.xml new file mode 100644 index 000000000..c6f6fc0a7 --- /dev/null +++ b/res/layout-finger/order_power_widget_buttons_activity.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index f256fe186..6c7d36b25 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -1580,4 +1580,67 @@ "Отказ" "%d%%" "Допълнителни системни актуализации" + + "Свързване на устройства с Wi-Fi" + "Wi-Fi Direct настройки" + + "Eхоподтискане на микрофон" + Микрофон на слушалки + + "Нов Wi-Fi драйвер" + "Използва по-малко енергия" + "Бар за известяване" + + "Лента за джаджи" + "Лента за джаджи" + "Показване на джаджи в бара за известяване" + "Скриване при промяна" + "Скриване на бара за известяване след натискане на джаджа" + "Скриване на индикатор" + "Скриване на индикатора за джаджи" + "Скриване на плъзчач" + "Когато повече от максималния брой джаджи са налични" + "Джаджа бутони" + "Избиране на джаджи, които да се показват в лентата" + "Ред на джаджа бутони" + "Избиране на реда на бутоните в лентата" + "Закачане на бутони" + "Wi-Fi" + "Bluetooth" + "GPS" + "Звук" + "Яркост" + "Синхронизиране" + "Wi-Fi AP" + "Заснемане" + "Мобилни данни" + "Заключване на екрана" + "2G/3G" + "Автоматично завъртане" + "Самолетен режим" + "LED светкавица" + "Спящ режим" + "Медиа: Старт/Пауза" + "Медиа: Предишна" + "Медиа: Следваща" + "WiMAX" + "Режим на бутони" + "Яркост" + "Избиране как бутонът за Яркост да променя режима" + "Автоматична" + "Бледа" + "Мрежа" + "Избиране как бутонът за Мрежа да променя режима" + "Спящ режим" + "Времето за заспиване на екрана" + "Звук" + "Избиране как бутонът за Звук да променя режима" + "Тишина" + "Вибриране" + "Звук" + "Звук+Вибриране" + "Светкавица" + "Избиране на High / Death лъчи" + "Вибриране при докосване" + "Вкл/Изкл вибриране при докосване" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index a7994e75d..9c7eb4374 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -1580,4 +1580,62 @@ "Zrušit" "%d %%" "Další aktualizace systému" + Nový ovladač Wifi + Použít nový ovladač Wifi + Použít mikrofon pro rušení ozvěny + Použít mikrofon sluchátek + Notifikační lišta + Power widget + Zobrazit Power widget + Zobrazit Power widget v notifikační liště + Skrýt po změně + Skrýt notifikační lištu po změně nastavení + Skrýt indikátor + Skrýt indikátory upozornění + Skrýt posuvník + Skrýt posuvník, pokud je přítomno více widgetů, než se vejde na šířku plochy + Tlačítka widgetu + Vyberte tlačítka widgetu + Pořadí tlačítek widgetu + Pořadí tlačítek widgetu v notifikační liště + Tlačítka + Wifi + Bluetooth + GPS + Zvuk + Jas + Synchronizace + Wifi AP + Časový limit obrazovky + Mobilní data + Zamykací obrazovka + 2G/3G + Orientace + Režim letadlo + LED přisvětlení + Uspat + Média: Přehrát/Pozastavit + Média: Předchozí + Média: Další + WiMAX + Módy tlačítek + Režim jasu + Zvolte režimy jasu + Automaticky + Potemnění + Režim sítě + Zvolte režimy sítě + Režim časového limitu obrazovky + Zvolte režimy časového limitu obrazovky + Režim zvuku + Zvolte režimy zvuku + Ticho + Vibrace + Zvuk + Zvuk+Vibrace + Režim LED + Zvolte režim LED přisvětlení + Hmatová odezva + Zapnout/vypnout hmatovou odezvu + Procenta u ukazatele baterie diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 434b9fc97..972a12d89 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -1581,4 +1581,61 @@ "Abbrechen" "%d%%" "Zusätzliche Systemupdates" + Neuer WLAN Treiber + Neuen WLAN Treiber nutzen + Echounterdrückung nutzen + Kopfhörermikrofon einschalten + Benachrichtigungsleiste + Energiesteuerung + Energiesteuerung anzeigen + Energiesteuerung in der Benachrichtigungsleiste anzeigen + Nach dem Wechseln ausblenden + Nach Auswählen eines Steuerelements Benachrichtigunsleiste ausblenden + Indikator ausblenden + Energiesteuerungsindikator ausblenden + Rollleiste ausblenden + Rollleiste ausblenden wenn die maximale Anzahl von Widgets angezeigt werden + Auswahl der Steuerelemente + Wählen Sie, welche Steuerelemente angezeigt werden sollen + Steuerelemente anordnen + Wählen Sie die Anordnung der Steuerelemente + Steuerelemente + WLAN anzeigen + Bluetooth anzeigen + GPS anzeigen + Soundprofile anzeigen + Displayhelligkeit anzeigen + Synchronisation anzeigen + WLAN AP anzeigen + Displayruhezustand anzeigen + Mobilfunkdaten anschalten + Bildschirmsperre anzeigen + 2G/3G anzeigen + Displayorientation anzeigen + Flugmodus anzeigen + LED Blitzlicht anzeigen + Schlafmodus anzeigen + Medien: Play/Pause anzeigen + Medien: Vorheriger Titel + Medien: Nächster Titel + WiMAX anzeigen + Änderungssteuerelemente + Helligkeit ändern + Wählen Sie welche Änderungen das Helligkeitssteuerelement anzeigen soll + Automatisch + Dimmen + Netzwerkeinstellungen + Wählen Sie welche Änderungen das Netzwerkeinstellungselement anzeigen soll + Bildschirmabschalten + Wählen Sie die Bildschirmabschaltungsmodi + Klingelmodussteuerelement + Wählen Sie welche Änderungen das Klingelmodussteuerelement anzeigen soll + Still + Vibrieren + Klingeln + Klingeln+Vibrieren + Blitzmodus + Wähle Helles / Dunkles Blitzlicht + Haptische Rückmeldung + Aktiviere/Deaktiviere Haptische Rückmeldung diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 1c19956b3..5a1180d81 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -1580,4 +1580,63 @@ "Ακύρωση" "%d%%" "Πρόσθετες ενημερώσεις συστήματος" - + Νεος οδηγός wifi + Ενεργοποίηση νέου οδηγού + Χρήση μικροφώνου ακύρωσης θορύβου + Χρήση μικροφώνου ακουστικών + Εργαλειοθήκη μπάρας ειδοποιήσεων + + Εμφάνιση εργαλειοθήκης + Εμφάνιση εργαλειοθήκης + Εμφάνιση της εργαλειοθήκης στην μπάρα ειδοποιήσεων + Απόκρυψη μπάρας με την αλλαγή + Απόκρυψη εργαλειοθήκης μετά την χρήση της + Απόκρυψη δείκτη + Απόκρυψη δεικτών στα κουμπιά + Απόκρυψη μπάρας κύλυσης + "Απόκρυψη μπάρας κύλισης όταν οι διακόπτες είναι περισσότεροι απ' όσοι χωράνε" + Κουμπιά διακοπτών + Επιλογή των κουμπιών που θα εμφανίζονται στην εργαλειοθήκη + Επιλογή σειράς κουμπιών + Επιλέξτε την σειρά με την οποία θα εμφανίζονται τα κουμπιά στην εργαλειοθήκη + Κουμπιά + Διακόπτης Wifi + Διακόπτης Bluetooth + Διακόπτης GPS + Επιλογή τρόπου ειδοποίησης + Διακόπτης φωτεινότητας + Διακόπτης συγχρονισμού + Διακόπτης Wi-Fi AP + Διακόπτης ορίου φωτισμού οθόνης + Διακόπτης δεδομένων κιν. τηλεφωνίας + Διακόπτης οθόνης κλειδώματος + Διακόπτης 2G/3G + Διακόπτης προσανατολισμού + Διακόπτης προφίλ πτήσης + Διακόπτης LED φακού + Μετάβαση σε κατάσταση αναμονής + Μουσική: Διακόπτης Play/Pause + Μουσική: προηγούμενο κομμάτι + Μουσική: επόμενο κομμάτι + Διακόπτης WiMAX + Επιλογές Διακόπτη + Επιλογή στάθμης φωτεινώτητας + Επιλέξτε πως ο διακόπτης φωτεινότητας θα λειτουργεί + Αυτόματο + Ελάχιστο + Τρόποι χρήσης δικτύου κινητής + Επιλέξτε πως ο διακόπτης 2G/3G θα λειτουργεί + Επιλογή χρόνου φωτισμού ορίου οθόνης + Επιλέξτε τον χρόνο που θα χρεισημοποιεί το όριο φωτισμού οθόνης + Πιθανοί συνδυασμοί ειδοποίησης + Επιλέξτε πως ο διακόπτης ειδοποίησης θα αλλάζει + Αθόρυβο + Δόνηση + Με ήχο + Ήχος+Δόνηση + Επιλογή τρόπου χρήσης φακού + Επιλογή δυνατού/αδύναμου φωστισμού + Δονισή κατά την χρήση των διακοπτών + Ενέργοποίηση/Απενεργοποίηση + + diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 6236161fc..64ed4a5f6 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -761,8 +761,8 @@ "Connect as" "Media device (MTP)" "Lets you transfer media files on Windows or using Android File Transfer on Mac (see www.android.com/filetransfer)" - "Camera (PTP)" - "Lets you transfer photos using camera software and transfer any files on computers that don\'t support MTP" + "Mass Storage" + "Legacy mode for mounting storage" "Install file-transfer tools" "Battery status" "Battery level" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index ed7347ba0..b87c168de 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -1580,4 +1580,61 @@ "Batal" "%d%%" "Pemutakhiran sistem tambahan" + Driver Wifi baru + Gunakan Driver Wifi baru + Gunakan echo cancelling microphone + Gunakan microphone headset + Notification Drawer + Power widget + Tampilkan power widget + Tampilkan power widget di notification drawer + Sembunyikan perubahan + Sembunyikan notification drawer setelah menekan tombol widget + Sembunyikan indikator + Sembunyikan indikator power widget + Sembunyikan scrollbar + Sembunyikan scrollbar jika lebih dari nomor maksimum tombol widget yang dapat ditampilkan + Tombol widget + Memilih tombol mana yang akan ditampilkan pada power widget + Susunan tombol widget + Pilih susunan tombol pada power widget + Tombol + Toggle Wi-Fi + Toggle Bluetooth + Toggle GPS + Toggle Suara + Toggle Kecerahan + Toggle Sinkronisasi + Toggle Wi-Fi AP + Toggle Screentimeout + Toggle Mobiledata + Toggle Lockscreen + Toggle 2G/3G + Toggle Orientasi + Toggle Mode Airplane + Toggle LED flashlight + Sleep + Media: Toggle Play/Pause + Media: Lewat ke Sebelumnya + Media: Lewat ke Selanjutnya + Toggle WiMAX + Mode tombol + Mode kecerahan + Memilih bagaimana tombol kecerahan mengubah modenya + Otomatis + Dim + Mode jaringan + Memilih bagaimana tombol mode jaringan mengubah modenya + Mode Screentimeout + Memilih bagaimana tombol Screentimeout mengubah modenya + Mode suara + Memilih bagaimana tombol suara mengubah modenya + Senyap + Getar + Suara + Suara+Getar + Mode Flash + Memilih Tinggi / Death Ray + Haptic feedback + Hidupkan/matikan haptic feedback diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 0681fd6d0..edf80c6a8 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -1580,4 +1580,61 @@ "Avbryt" "%d %%" "Ytterligere systemoppdateringer" - + Ny Wi-Fi-driver + Bruk den nye Wi-Fi-driveren + Bruk ekkokansellerende mikrofon + Bruk hodetelefonmikrofon + Varslingsskuff + Strøm-widget + Vis strøm-widget + Vis strøm-widgetten i varslingsskuffen + Skjul ved endring + Skjul varslingsskuffen ved av-/påskruing av en widget-bryter + Skjul indikator + Skjul strøm-widget-indikatoren + Skjul rullefeltet + Skjul rullefeltet dersom flere enn maksimalt antall widget-brytere er til stede + Widget-brytere + Velg hvilke brytere som skal vises i strøm-widgetten + Rekkefølge på widget-brytere + Velg rekkefølgen på bryterne i strøm-widgetten + Brytere + Skru av/på Wi-Fi + Skru av/på Bluetooth + Skru av/på GPS + Skru av/på lyd + Skru av/på lysstyrke + Skru av/på synk. + Skru av/på Wi-Fi AP + Skru av/på tidsavbruddet for skjerm + Skru av/på mobildata + Skru av/på låseskjerm + Skru av/på 2G/3G + Skru av/på orientering + Skru av/på flymodus + Skru av/på LED-lommelykt + Gå i dvalemodus + Media: Skru av/på spill/pause + Media: Hopp til forrige + Media: Hopp til neste + Skru av/på WiMAX + Brytermoduser + Lysstyrkemoduser + Velg hvordan lysstyrkebryteren forandrer modus + Auto + Dunkelt + Nettverksmoduser + Velg hvordan nettverksbryteren forandrer modus + Tidsavbrudd for skjermmodus + Velg hvordan bryteren for tidsavbrudd for skjerm forandrer modus + Lydmodus + Velg hvordan lydbryteren forandrer modus + Lydløs + Vibrér + Lyd + Lyd+Vibrér + Lommelyktmodus + Velg høy/dødsstråle + Vibrér ved berøring + Skru av/på vibrasjon ved berøring + \ No newline at end of file diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml index 39388dddc..a7453ff79 100644 --- a/res/values-pt-rPT/arrays.xml +++ b/res/values-pt-rPT/arrays.xml @@ -131,7 +131,7 @@ "2 minutos" "5 minutos" "1 hora" - "Nunca exceder tempo limite" + "Sem tempo limite" "Fraco" @@ -186,7 +186,7 @@ "Manual" - "Desativada" + "Desactivada" "Alerta" "Vibrar" @@ -207,14 +207,14 @@ "Não especificado" - "Armazenamento de dispositivo interno" - "Cartão SD amovível" + "Armazenamento interno" + "Cartão microSD externo" "Permitir que seja o sistema a decidir" - "Desativado" + "Desactivado" "Vibrar" - "Desativar som" + "Desactivar som" "Curta" @@ -232,7 +232,7 @@ "Utilizar sempre a verificação HDCP" - "Animação desativada" + "Animação desactivada" "Escala de animação 0,5x" "Escala de animação 1x" "Escala de animação 1,5x" @@ -241,7 +241,7 @@ "Escala de animação 10x" - "Animação desativada" + "Animação desactivada" "Escala de animação 0,5x" "Escala de animação 1x" "Escala de animação 1,5x" @@ -252,10 +252,10 @@ "Limite padrão" "Sem processos em segundo plano" - "No máximo, 1 processo" - "No máximo, 2 processos" - "No máximo, 3 processos" - "No máximo, 4 processos" + "No máximo 1 processo" + "No máximo 2 processos" + "No máximo 3 processos" + "No máximo 4 processos" "VPN PPTP" @@ -267,7 +267,7 @@ "Desligada" - "A inicializar..." + "A iniciar..." "A ligar..." "Ligada" "Tempo limite" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 02b8dc4fd..4a429a5e0 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -100,8 +100,8 @@ "Frio" "Bluetooth" "Detectável" - "Visível p/ tds aparelhos Bluetooth próximos (%1$s)" - "Visível para tds os aparelhos Bluetooth nas prox." + "Visível para todos os aparelhos Bluetooth(%1$s)" + "Visível para todos os aparelhos Bluetooth" "Não visível a outros aparelhos Bluetooth" "Visível apenas para aparelhos sincronizados" "Tornar o dispositivo detectável" @@ -118,8 +118,8 @@ "Mudar o nome" "Desligar?" "Isto terminará a sua ligação com:<br><b>%1$s</b>" - "Desativar perfil?" - "Isto desativará:<br><b>%1$s</b><br><br>Do:<br><b>%2$s</b>" + "Desactivar perfil?" + "Isto desactivará:<br><b>%1$s</b><br><br>Do:<br><b>%2$s</b>" "Ligado" "Ligado (sem telefone)" "Ligado (sem multimédia)" @@ -132,24 +132,24 @@ "Aparelho Bluetooth sem nome" "A pesquisar" "Tocar p/ sincronizar" - "Nenhum aparelho Bluetooth nas proximid." + "Nenhum aparelho Bluetooth próximo" "Pedido de emparelhamento de Bluetooth" "Pedido de emparelhamento" "Toque para sincronizar com %1$s" "Mostrar ficheiros recebidos" "Seleccionador de dispositivo Bluetooth" "Pedido de emparelhamento de Bluetooth" - "Uma aplicação pretende ativar o Bluetooth. Permitir?" + "Uma aplicação pretende activar o Bluetooth. Permitir?" "Uma aplicação do tablet pretende que outros aparelhos Bluetooth possam detetar o seu tablet durante %1$d segundos. Permitir?" "Uma aplicação do telemóvel pretende que outros aparelhos Bluetooth possam detetar o seu telemóvel durante %1$d segundos. Permitir?" - "Uma aplicação do tablet pretende que o tablet possa “sempre ser detetado” por outros aparelhos Bluetooth. Permitir?" - "Uma aplicação do telemóvel pretende que o telemóvel possa \"sempre ser detetado\" por outros aparelhos Bluetooth. Permitir?" - "Uma aplicação do tablet pretende ativar o Bluetooth para que o tablet possa ser detetado por outros aparelhos durante %1$d segundos. Permitir?" - "Uma aplicação do telemóvel pretende ativar o Bluetooth para que o telemóvel possa ser detetado por outros aparelhos durante %1$d segundos. Permitir?" + "Uma aplicação do tablet pretende que o tablet possa “sempre ser detectado” por outros aparelhos Bluetooth. Permitir?" + "Uma aplicação do telemóvel pretende que o telemóvel possa \"sempre ser detectado\" por outros aparelhos Bluetooth. Permitir?" + "Uma aplicação do tablet pretende activar o Bluetooth para que o tablet possa ser detetado por outros aparelhos durante %1$d segundos. Permitir?" + "Uma aplicação do telemóvel pretende activar o Bluetooth para que o telemóvel possa ser detetado por outros aparelhos durante %1$d segundos. Permitir?" "Uma aplicação do tablet pretende ativar o Bluetooth para que o tablet possa ser detetado por outros aparelhos. Permitir?" "Uma aplicação do telemóvel pretende ativar o Bluetooth para que o telemóvel possa ser detetado por outros aparelhos. Permitir?" - "Ligar Bluetooth…" - "Desativar o Bluetooth…" + "A ligar o Bluetooth..." + "A desligar o Bluetooth..." "Ligação automática" "Pedido de ligação Bluetooth" "Toque para ligar a “%1$s”." @@ -183,7 +183,7 @@ "Atenção" "OK" "O nome de anfitrião que introduziu não é válido." - "A lista de exclusão introduzida não está formatada corretamente. Introduza uma lista de domínios excluídos separados por vírgulas." + "A lista de exclusão introduzida não está formatada correctamente. Introduza uma lista de domínios excluídos separados por vírgulas." "É necessário preencher o campo referente à porta." "O campo referente à porta tem de estar vazio se o campo do anfitrião estiver vazio." "A porta introduzida não é válida." @@ -482,16 +482,16 @@ "Android Beam" "Pronto para transmitir conteúdo da aplicação via NFC" "Desativado" - "Não disponível, porque o NFC está desativado" + "Não disponível, porque o NFC está desactivado" "Android Beam" - "Quando esta funcionalidade está ativada, pode transmitir o conteúdo da aplicação para outro aparelho com capacidade de NFC mantendo os aparelhos próximos um do outro. Por exemplo, pode transmitir páginas do Navegador, vídeos do YouTube, contactos de Pessoas e muito mais. "\n\n"Basta juntar os aparelhos (normalmente de costas) e, em seguida, tocar no ecrã. A aplicação determina o que é transmitido." + "Quando esta funcionalidade está activada, pode transmitir o conteúdo da aplicação para outro aparelho com capacidade de NFC mantendo os aparelhos próximos um do outro. Por exemplo, pode transmitir páginas do Navegador, vídeos do YouTube, contactos de Pessoas e muito mais. "\n\n"Basta juntar os aparelhos (normalmente de costas) e, em seguida, tocar no ecrã. A aplicação determina o que é transmitido." "Wi-Fi" "Activar Wi-Fi" "Wi-Fi" "Definições de Wi-Fi" "Wi-Fi" "Configurar e gerir pontos de acesso sem fios" - "Ligar Wi-Fi…" + "A ligar Wi-Fi…" "A desligar Wi-Fi..." "Erro" "No Modo de avião" @@ -523,7 +523,7 @@ "Estado" "Velocidade da ligação" "Endereço IP" - "método EAP" + "Método EAP" "Autenticação da fase 2" "Certificado CA" "Certificado do utilizador" @@ -535,10 +535,10 @@ "(não alterado)" "(não especificado)" "Guardada" - "Desativado" + "Desactivado" "Evitada ligação à internet fraca" - "A rede foi evitada devido a uma ligação fraca. Desative essa opção no ecrã Definições > Wi-Fi, no item de menu Avançadas." + "A rede foi evitada devido a uma ligação fraca. Desactive essa opção no ecrã Definições > Wi-Fi, no item de menu Avançadas." "Problema de autenticação" "Fora do alcance" "Rede protegida disponível" @@ -550,7 +550,7 @@ "Esquecer" "Guardar" "Cancelar" - "Detetada outra sessão Wi-Fi protegida. Tente dentro de alguns minutos." + "Detectada outra sessão Wi-Fi protegida. Tente dentro de alguns minutos." "Wi-Fi Avançada" "Banda de frequência Wi-Fi" "Especifique o intervalo de frequência de operação" @@ -579,6 +579,8 @@ "Remover grupo" "Avançado" "Aparelhos disponíveis" + Activar conectividade ponto a ponto + Definições do Wi-Fi Direct "Hotspot Wi-Fi portátil" "Hotspot portátil %1$s activo" "Erro do hotspot Wi-Fi portátil" @@ -647,7 +649,7 @@ "Escolher imagem de fundo de" "Proteção de Ecrã" "Será iniciado ao suspender, se estiver ligado à alimentação" - "Desativado" + "Desactivado" "Proteção de Ecrã selecionada" "Quando ativar" "Após %1$s inativo" @@ -759,10 +761,6 @@ "Ligação USB do computador" "Ligação USB do computador" "Ligado como" - "Aparelho multimédia (MTP)" - "Permite transferir ficheiros multimédia no Windows ou através da Transferência de Ficheiros Android no Mac (consulte www.android.com/filetransfer)" - "Câmara (PTP)" - "Permite transferir fotografias utilizando o software da câmara e quaisquer ficheiros em computadores que não suportem MTP" "Instalar ferramentas de transferência de ficheiros" "Estado da bateria" "Nível da bateria" @@ -789,9 +787,9 @@ "Tipo APN" "Protocolo APN" "Protocolo APN quando em roaming" - "Ativar/desativar APN" - "APN ativado" - "APN desativado" + "Activar/desactivar APN" + "APN activado" + "APN desactivado" "Portador" "Eliminar APN" "Novo APN" @@ -946,10 +944,10 @@ "Definições da aplicação" "Fontes desconhecidas" "Permitir instalação de aplicações que não são do Market" - "O tablet e os dados pessoais estão mais vulneráveis ​​a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao tablet ou perda de dados que possam resultar da utilização destas aplicações." - "O telemóvel e os dados pessoais estão mais vulneráveis ​​a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao telemóvel ou perda de dados que possam resultar da utilização dessas aplicações." + "O tablet e os dados pessoais estão mais vulneráveis a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao tablet ou perda de dados que possam resultar da utilização destas aplicações." + "O telemóvel e os dados pessoais estão mais vulneráveis a ataques de aplicações de fontes desconhecidas. O utilizador concorda que é o único responsável por qualquer dano causado ao telemóvel ou perda de dados que possam resultar da utilização dessas aplicações." "Definições avançadas" - "Ativar mais opções de definições" + "Activar mais opções de definições" "Informações da aplicação" "Armazenamento" "Iniciar por predefinição" @@ -990,7 +988,7 @@ "Em execução" "Armazenamento USB" "No cartão SD" - "Desativada" + "Desactivada" "Sem aplicações." "Armaz. interno" "Armaz. USB" @@ -1003,8 +1001,8 @@ "A aplicação não foi encontrada na lista de aplicações instaladas." "Não foi possível limpar os dados da aplicação." - "Desinstalar atualizações?" - "Serão desinstaladas todas as atualizações para esta aplicação do sistema Android." + "Desinstalar actualizações?" + "Serão desinstaladas todas as actualizações para esta aplicação do sistema Android." "Limpar dados" "Não foi possível limpar os dados da aplicação." "Esta aplicação pode aceder aos seguintes itens no seu tablet:" @@ -1083,7 +1081,7 @@ "Visualizar palavras-passe" "Este método de introdução pode permitir a recolha de todo o texto que digitar, incluindo dados pessoais como, por exemplo, palavras-passe e números de cartões de crédito. Decorre da aplicação %1$s. Utilizar este método de introdução?" - "Este corretor ortográfico pode permitir a recolha de todo o texto que introduzir, incluindo dados pessoais, como palavras-passe e números de cartões de crédito. Decorre da aplicação %1$s. Utilizar este corretor ortográfico?" + "Este corrector ortográfico pode permitir a recolha de todo o texto que introduzir, incluindo dados pessoais, como palavras-passe e números de cartões de crédito. Decorre da aplicação %1$s. Utilizar este corretor ortográfico?" "Rato/trackpad" "Velocidade do ponteiro" "Dicionário do utilizador" @@ -1168,7 +1166,7 @@ "Tutorial" "Em" "Desligado" - "permitido" + "Permitido" "Não permitido" "Permitir" "Não permitir" @@ -1197,29 +1195,29 @@ "Ecrã activo" "GPS activado" "Wi-Fi" - "Despertar" + "Acordado" "Sinal da rede móvel" - "Hora de activação do dispositivo" + "Tempo total activado" "Tempo de ligação Wi-Fi" - "Tempo de ligação Wi-Fi" + "Tempo de ligação Bluetooth" "%1$s - %2$s%%" "Detalhes do histórico" - "Utilizar detalhes" - "Utilizar detalhes" + "Detalhes de utilização" + "Detalhes de utilização" "Ajustar utilização de energia" "Pacotes incluídos" "Ecrã" "Wi-Fi" "Bluetooth" - "inactividade do telefone" + "Rádio do telefone" "Chamadas de voz" "Tablet inactivo" "Telefone inactivo" "Total da CPU" - "primeiro plano da CPU" - "Manter desperto" + "CPU em primeiro plano" + "Em funcionamento" "GPS" "Wi-Fi em execução" "Tablet" @@ -1228,7 +1226,7 @@ "Dados recebidos" "Áudio" "Vídeo" - "Hora activada" + "Tempo activado" "Tempo sem sinal" "Forçar paragem" "Informações da aplicação" @@ -1243,14 +1241,14 @@ "Mudar para modo de avião para poupar energia em áreas sem cobertura de rede" "Bateria utilizada pelo ecrã e pela iluminação de fundo" "Reduzir o brilho do ecrã e/ou o tempo que este permanece iluminado" - "Bateria utilizada por Wi-Fi" - "Desativar Wi-Fi quando não estiver a ser utilizada ou não estiver disponível" + "Bateria utilizada pelo Wi-Fi" + "Desactivar Wi-Fi quando não estiver a ser utilizado ou não estiver disponível" "Bateria utilizada pelo Bluetooth" - "Desligar o Bluetooth quando não estiver a ser utilizado" + "Desactivar o Bluetooth quando não estiver a ser utilizado" "Tentar ligação a um aparelho Bluetooth diferente" - "Bateria utilizada pelo Bluetooth" + "Bateria utilizada pelo serviço" "Parar ou desinstalar a aplicação" - "Controlar manualmente o GPS para impedir que a aplicação o utilize" + "Controlar manualmente o GPS para impedir que seja utilizado indevidamente" "A aplicação pode sugerir definições para reduzir a utilização da bateria" "%1$s desde que foi desligado" "Desde a última vez que foi desligado por %1$s" @@ -1322,7 +1320,7 @@ "Introduzir palavra-passe do armazenamento de credenciais." "Palavra-passe actual:" "Remover todo o conteúdo?" - "A palavra-passe deve ter, pelo menos, 8 caracteres." + "A palavra-passe deve ter pelo menos 8 caracteres." "Palavra-passe incorrecta." "Palavra-passe incorrecta. Tem mais uma tentativa antes de o armazenamento de credenciais ser apagado." "Palavra-passe incorrecta. Tem mais %1$d tentativas antes de o armazenamento de credenciais ser apagado." @@ -1390,16 +1388,16 @@ "Não é possível configurar uma ligação Wi-Fi tipo EAP durante a configuração. Após a configuração, é possível fazê-lo em Definições > Redes sem fios e outras." "A ligação pode demorar alguns minutos..." "Toque em ""Seguinte"" para continuar a configuração."\n\n"Toque em ""Anterior"" para ligar a uma rede Wi-Fi diferente." - "Sincronização ativada" - "Sincronização desativada" + "Sincronização activada" + "Sincronização desactivada" "Erro de sincronização" "Definições de sincronização" - "A sincronização está atualmente com problemas e será retomada em breve." + "A sincronização está actualmente com problemas e será retomada em breve." "Adicionar conta" "Dados em segundo plano" "As aplicações podem sincronizar, enviar e receber dados em qualquer altura" - "Desat. dados seg. plano?" - "A desativação dos dados de segundo plano permite economizar a bateria e reduzir a utilização de dados. Algumas aplicações podem continuar a utilizar a ligação de dados de segundo plano." + "Desact. dados seg. plano?" + "A desactivação dos dados de segundo plano permite economizar a bateria e reduzir a utilização de dados. Algumas aplicações podem continuar a utilizar a ligação de dados de segundo plano." "Sinc. autom. de dados da aplicação" "Sincron. activada" "A sincronização está desactivada" @@ -1440,27 +1438,27 @@ "Ficheiros diversos" "selecionado(s) %1$d de %2$d" "%1$s de %2$s" - "Selecionar tudo" + "Seleccionar tudo" "Verificação HDCP" "Definir o comportamento da verificação HDCP" "Interface de utilizador" "Modo rigoroso ativado" "Piscar ecrã qd aplic. fazem oper. prolong. no tópico princ." "Localização do ponteiro" - "Sobrep. de ecrã que mostra a dados atuais de toque" + "Sobrep. de ecrã que mostra a dados actuais de toque" "Apresentar toques" "Apresentar feedback visual para toques" - "Mostrar atualiz. de ecrã" - "Piscar áreas do ecrã quando são atualizadas" + "Mostrar actualiz. de ecrã" + "Piscar áreas do ecrã quando são actualizadas" "Mostrar utilização da CPU" - "Sobrep. de ecrã que mostra a utiliz. atual da CPU" + "Sobrep. de ecrã que mostra a utiliz. actual da CPU" "Forçar composição GPU" "Utilizar aceleração de hardware 2D em aplicações" "Escala de anim. da janela" "Escala de anim. de trans." "Aplicações" - "Não manter atividades" - "Destruir atividades assim que o utilizador sair" + "Não manter actividades" + "Destruir actividades assim que o utilizador sair" "Limite proc. em 2º plano" "Mostrar todos os ANR" "Mostrar erro \"Aplic. não Resp.\" p/ aplic. 2º plano" @@ -1478,7 +1476,7 @@ "Fundo" "Calculado pelo tablet. A utiliz. de dados calculada pela operadora pode diferir." - "Desativar dados móveis?" + "Desactivar dados móveis?" "Definir limite de dados móveis" "Definir limite de dados 4G" "Definir limite de dados 2G-3G" @@ -1495,7 +1493,7 @@ "Dados 4G" "Ver definições da aplicação" - "Desativar dados de segundo plano apenas na rede de dados móvel. Será usado o Wi-Fi se estiver disponível." + "Desactivar dados de segundo plano apenas na rede de dados móvel. Será usado o Wi-Fi se estiver disponível." "Para restringir os dados de segundo plano para esta aplicação, comece por definir um limite de dados móveis." "Restringir dados em segundo plano?" "Esta funcionalidade pode levar à paragem de uma aplicação que depende de dados de segundo plano, quando a rede Wi-Fi não estiver disponível."\n\n"É possível encontrar controlos de utilização de dados mais adequados nas definições disponíveis na aplicação." @@ -1560,19 +1558,19 @@ "Concluir" "Ign. tutorial" "Lição 1: Explorar o ecrã" - "Após ativar a opção Explorar por Toque, poderá tocar no ecrã para saber o que está sob o dedo. Por exemplo, o ecrã atual contém ícones de aplicações. Toque no ecrã e deslize lentamente o dedo para localizar um deles." + "Após activar a opção Explorar por Toque, poderá tocar no ecrã para saber o que está sob o dedo. Por exemplo, o ecrã actual contém ícones de aplicações. Toque no ecrã e deslize lentamente o dedo para localizar um deles." "Bom. Continue a deslizar o dedo pelo ecrã até localizar pelo menos mais um ícone." "Para ativar algo em que está a tocar, toque nisso. Deslize lentamente o dedo até localizar o ícone de %s. Em seguida, toque uma vez no ícone para o ativar." - "O seu dedo está a tocar no ícone %s. Toque uma vez para ativar o ícone." + "O seu dedo está a tocar no ícone %s. Toque uma vez para activar o ícone." "O seu dedo moveu-se sobre o ícone %s e depois afastou-se. Lentamente, deslize o dedo em torno do ecrã até encontrar novamente o ícone do Navegador." "Bom. Para passar à próxima lição, localize e ative o botão %s, situado junto ao canto inferior direito do ecrã." "Lição 2: Deslocar com dois dedos" "Para percorrer uma lista, pode deslizar lentamente dois dedos ao longo do ecrã. Por exemplo, o ecrã atual contém uma lista de nomes de aplicações que pode percorrer para cima ou para baixo. Primeiro, tente identificar alguns itens na lista deslizando lentamente um dedo." - "Ótimo. Continue a deslizar o dedo para encontrar pelo menos mais um item." + "Óptimo. Continue a deslizar o dedo para encontrar pelo menos mais um item." "Agora, coloque dois dedos sobre um item da lista e deslize os dedos para cima. Se chegar ao topo do ecrã, levante os dedos, coloque-os mais abaixo na lista e continue a deslizar para cima." - "Ótimo. Continue a deslizar os dedos para percorrer mais itens." + "Óptimo. Continue a deslizar os dedos para percorrer mais itens." "Concluiu o tutorial. Para sair, localize e toque no botão %s." - "Correção ortográfica" + "Correcção ortográfica" "Introduza a palavra-passe de cópia de segurança completa atual aqui" "Introduzir nova palavra-passe para cópias de segurança completas aqui" "Reintroduza a nova palavra-passe da cópia de segurança completa aqui" @@ -1580,4 +1578,69 @@ "Cancelar" "%d%%" "Atualizações adicionais do sistema" + + "Novo Driver Wi-Fi" + "Usar o novo driver wi-Fi" + "Cancelamento de eco" + "Usar microfone do auricular" + "Barra de Notificação" + + "Barra de Controlo de Energia" + "Mostrar a Barra de Energia" + "Mostra a barra de controlo de energia na barra de notificações" + "Esconder ao alterar" + "Esconde a barra de notificações ao alterar uma opção" + "Esconder indicador de estado" + "Esconde os indicadores por baixo do botão que informam sobre o estado do mesmo" + "Desactivar 'Deslizamento Lateral'" + "Esconde a barra de deslizamento que aparece quando é excedido o número máximo de botões que podem aparecer ao mesmo tempo na barra" + "Botões da Barra de Energia" + "Selecciona os botões que aparecem na Barra de Energia" + "Ordem dos botões" + "Selecciona a ordem pela qual os botões aparecem na Barra de Energia" + "Botões" + "Alterar o Wi-Fi" + "Alterar o Bluetooth" + "Alterar o GPS" + "Alterar o Som" + "Alterar o Brilho do Ecrã" + "Alterar a Sincronização Automática" + "Alterar o Wi-Fi AP" + "Alterar o Tempo de Desligamento do Ecrã" + "Alterar os Dados Móveis" + "Alterar o Ecrã de Bloqueio" + "Alterar o 2G/3G" + "Alterar o Sensor de Orientação" + "Alterar o modo de Avião" + "Alterar a Lanterna LED" + "Bloquear o Smartphone" + "Media: Alterar Tocar/Parar" + "Media: Voltar à anterior" + "Media: Passar à próxima" + "Alterar o WiMAX" + "Modos dos Botões" + "Modos do Brilho do Ecrã" + "Escolhe os valores do botão 'Alterar o Brilho do Ecrã'" + "Automático" + "Mínimo" + "Modos de Rede" + "Escolhe os valores do botão 'Alterar o 2G/3G'" + "Modos de Desligamento do Ecrã" + "Escolhe os valores do botão 'Alterar o Tempo de Desligamento do Ecrã'" + "Modos de Som" + "Escolhe os valores do botão 'Alterar o Som'" + "Silêncio" + "Apenas vibrar" + "Apenas som" + "Som + Vibrar" + "Modos da Lanterna" + "Escolher Brilho Normal / Intenso" + "Vibração ao seleccionar" + "Liga / Desliga a vibração de resposta a uma acção de 'touch'" + "Media Transfer Protocol (MTP)" + "Permite transferir ficheiros media no Windows ou por meio do Android File Transfer no Mac." + "Armazenamento em Massa" + "Modo original de transferência de ficheiros." + Bateria em percentagem + diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml index 5633e42ca..75a08a59a 100644 --- a/res/values-pt/arrays.xml +++ b/res/values-pt/arrays.xml @@ -81,25 +81,25 @@ - "Procurando…" - "Conectando..." - "Autenticando..." - "Obtendo endereço IP…" + "A procurar..." + "A conectar..." + "A autenticar..." + "A obter endereço IP..." "Conectado" "Suspenso" - "Desconectando…" + "A desconectar..." "Desconectado" "Falha" - "Procurando…" - "Conectando-se a %1$s…" - "Autenticando com a %1$s…" - "Obtendo endereço IP da %1$s…" + "A procurar..." + "A conectar a %1$s…" + "A autenticar na %1$s…" + "A obter endereço IP da %1$s…" "Conectado a %1$s" "Suspenso" - "Desconectando da %1$s…" + "A desconectar da %1$s…" "Desconectado" "Falha" @@ -117,7 +117,7 @@ "Pressione o botão" - "PIN do dispositivo pareado" + "PIN do dispositivo emparelhado" "PIN deste disposit." @@ -131,10 +131,10 @@ "Dois minutos" "Cinco minutos" "Uma hora" - "Nunca definir tempo limite" + "Sem tempo" - "Ruim" + "Mau" "Bom" "Bom" "Excelente" @@ -172,8 +172,8 @@ "GTC" - "Desativado" - "Pressione o botão" + "Desactivado" + "Prima o botão" "PIN do ponto de acesso" "PIN deste dispositivo" @@ -186,7 +186,7 @@ "Manual" - "Desativado" + "Desactivado" "Alerta" "Vibrar" @@ -207,14 +207,14 @@ "Não especificado" - "Armazenamento do dispositivo interno" - "Cartão SD removível" + "Armazenamento interno do dispositivo" + "Cartão SD externo" "Deixar o sistema decidir" - "Desativado" + "Desactivado" "Vibrar" - "Desativar som" + "Desactivar som" "Curto" @@ -254,7 +254,7 @@ "Sem processos em segundo plano" "No máximo um processo" "No máximo dois processos" - "No máximo, três processos" + "No máximo três processos" "No máximo quatro processos" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 8bb99c50a..79e3ccf28 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -759,10 +759,6 @@ "Conexão USB do computador" "Conexão USB do computador" "Conectar-se como" - "Dispositivo de mídia (MTP)" - "Permite a transferência de arquivos de mídia no Windows ou por meio do Android File Transfer no Mac. Consulte www.android.com.br/filetransfer." - "Câmera (PTP)" - "Permite a transferência de fotos usando o software da câmera e transfere todos os arquivos em computadores que não suportam MTP" "Instalar ferramentas de transferência de arquivos" "Status da bateria" "Nível da bateria" @@ -946,8 +942,8 @@ "Configurações do aplicativo" "Fontes desconhecidas" "Permite a instalação de aplicativos que não são do Android Market" - "Seu tablet e seus dados pessoais são mais vulneráveis ​​a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano a seu tablet ou perda de dados decorrentes do uso desses aplicativos." - "Seu telefone e seus dados pessoais são mais vulneráveis ​​a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano ao seu telefone ou perda de dados decorrentes do uso desses aplicativos." + "Seu tablet e seus dados pessoais são mais vulneráveis ??a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano a seu tablet ou perda de dados decorrentes do uso desses aplicativos." + "Seu telefone e seus dados pessoais são mais vulneráveis ??a ataques de aplicativos de fontes desconhecidas. Você concorda que é o único responsável por qualquer dano ao seu telefone ou perda de dados decorrentes do uso desses aplicativos." "Configurações avançadas" "Ativa mais opções de configuração" "Informações do aplicativo" @@ -1580,4 +1576,68 @@ "Cancelar" "%d%%" "Atualizações adicionais do sistema" + + "Novo Driver Wi-Fi" + "Usar o novo driver wi-Fi" + "Cancelamento de eco" + "Usar microfone do auricular" + "Barra de Notificação" + + "Barra de Controlo de Energia" + "Mostrar a Barra de Energia" + "Mostra a barra de controlo de energia na barra de notificações" + "Esconder ao alterar" + "Esconde a barra de notificações ao alterar uma opção" + "Esconder indicador de estado" + "Esconde os indicadores por baixo do botão que informam sobre o estado do mesmo" + "Desactivar 'Deslizamento Lateral'" + "Esconde a barra de deslizamento que aparece quando é excedido o número máximo de botões que podem aparecer ao mesmo tempo na barra" + "Botões da Barra de Energia" + "Selecciona os botões que aparecem na Barra de Energia" + "Ordem dos botões" + "Selecciona a ordem pela qual os botões aparecem na Barra de Energia" + "Botões" + "Alterar o Wi-Fi" + "Alterar o Bluetooth" + "Alterar o GPS" + "Alterar o Som" + "Alterar o Brilho do Ecrã" + "Alterar a Sincronização Automática" + "Alterar o Wi-Fi AP" + "Alterar o Tempo de Desligamento do Ecrã" + "Alterar os Dados Móveis" + "Alterar o Ecrã de Bloqueio" + "Alterar o 2G/3G" + "Alterar o Sensor de Orientação" + "Alterar o modo de Avião" + "Alterar a Lanterna LED" + "Bloquear o Smartphone" + "Media: Alterar Tocar/Parar" + "Media: Voltar à anterior" + "Media: Passar à próxima" + "Alterar o WiMAX" + "Modos dos Botões" + "Modos do Brilho do Ecrã" + "Escolhe os valores do botão 'Alterar o Brilho do Ecrã'" + "Automático" + "Mínimo" + "Modos de Rede" + "Escolhe os valores do botão 'Alterar o 2G/3G'" + "Modos de Desligamento do Ecrã" + "Escolhe os valores do botão 'Alterar o Tempo de Desligamento do Ecrã'" + "Modos de Som" + "Escolhe os valores do botão 'Alterar o Som'" + "Silêncio" + "Apenas vibrar" + "Apenas som" + "Som + Vibrar" + "Modos da Lanterna" + "Escolher Brilho Normal / Intenso" + "Vibração ao seleccionar" + "Liga / Desliga a vibração de resposta a uma acção de 'touch'" + "Media Transfer Protocol (MTP)" + "Permite montar ambas as memórias (interna e externa) no Windows ou por meio do Android File Transfer no Mac." + "Armazenamento em Massa" + "Apenas monta o cartão microSD externo." + Bateria em percentagem diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index b206d8ee7..3cf3b8b16 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -1123,7 +1123,7 @@ "Настройки" "Настройки" "Активные способы ввода" - "Язык системы" + "Язык системы" "Настройки %1$s" "Выберите активные способы ввода" "Настройки экранной клавиатуры" @@ -1578,6 +1578,65 @@ "Подтвердите пароль" "Сохранить пароль" "Отмена" + System interface + Переключатели в шторке + Power widget + Показывать переключатели + Показывать виджеты-переключатели в шторке + Закрывать шторку + Прятать шторку после переключения виджетов + Спрятать индикатор + Выключить индикатор под кнопками виджетов + Прятать скроллбар + Убрать скроллбар, появляющийся когда переключателей больше, чем может поместиться в шторке + Кнопки переключателей + Выберите, какие кнопки переключателей будут отображены + Порядок кнопок + Выберите порядок кнопок переключателей + Переключатели + Wi-Fi + Bluetooth + GPS + Звук + Яркость + Синхронизация + Wi-Fi AP + Спящий режим + Передача данных + Блокировка экрана + 2G/3G + Автоповорот + Режим полёта + Фонарик + Отправить спать :) + Медиа: Play/Pause + Медиа:Skip to Next + Медиа: Skip to Previous + WiMAX + Настройка переключателей + Авто + Тусклый + Режим сети + Выберите режим переключения сети + Настройка спящего режима + Выберите таймаут спящего режима + Настройки яркости + Выбор режимов переключения яркости + Рингтон и уведомления + Выберите режимы смены звука + Без звука + Вибрация + Мелодия + Мелодия+Вибрация + Flash mode + Choose High / Death Ray + Виброотклик + Включение/выключение виброотклика переключателей + Шумоподавление + Микрофон гарнитуры + Новый драйвер Wi-Fi + Использовать новый драйвер Wi-Fi + Батарейка в процентах diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index d67599a15..4e2b9e6ec 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -13,9 +13,68 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + Novi Wifi gonilnik + Uporabi novi Wifi gonilnik + Mikrofon za izničenje odmeva + Mikrofon na slušalkah + Opozorilna vrstica + + Pripomoček za upravljanje naprav + Prikaži pripomoček za upravljanje naprav + Prikaži pripomoček za upravljanje naprav v opozorilni vrstici + Skrij ob spremembi + Skrij opozorilno vrstico po preklopu pripomočkov + Skrij indikatorje + Skrij indikatorje delovanja pripomočkov + Skrij drsnik + Skrij drsnik, če je prisotnih več gumbov pripomočkov od dovoljenega v opozorilni vrstici + Pripomočki + Izberite kateri pripomočki bojo prikazani v opozorilni vrstici + Vrstni red pripomočkov + Vrstni red pripomočkov v opozorilni vrstici + Gumbi + Prekopi Wi-Fi + Preklopi Bluetooth + Preklopi GPS + Preklopi zvok + Preklopi osvetlitev + Preklopi sinhronizacijo + Preklopi Wi-Fi dostopno točko + Preklopi časovni izklop zaslona + Preklopi prenos podatkov + Preklopi zaklep zaslona + Preklopi med 2G/3G + Preklopi rotacijo zaslona + Preklopi način za letalo + Preklopi LED svetilko + Preklopi spanje + Preklop predvajaj/pavza + Skoči na prejšnji posnetek + Skoči na naslednji posnetek + Preklopi WiMAX + Načini gumbov + Načini osvetlitve + Izberite kako gumb za osvetlitev preklopi med načini osvetljevanja + Avtomatska osvetlitev + Zatemni + Omrežni načini + Izberite kako gumb za omrežje preklopi med načini povezav + Časovni izklop zaslona + Preklopite med časovnimi zakasnitvami izklopa zaslona + Zvočni načini + Izberite način za preklop med zvočnimi načini naprave + Tiho + Vibriraj + Zvok + Zvok+Vibriraj + Načini bliskavice + Izberite moč bliskavice + Vibriraj na dotik + Vklopi/Izklopi vibracijo na dotik + "Da" "Ne" "Neznano" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 2360d3842..57379c27c 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -1580,4 +1580,66 @@ "İptal" "%%%d" "Ek sistem güncellemeleri" + + Yeni kablosuz ağ sürücüsü + Yeni kablosuz ağ sürücülerini kullan + Yankı engelleyici ikinci mikrofonu kullan + Kulaklık mikrofonunu kullan + Bildirim çekmecesi + + Power widget + Power widget\'ı göster + Power Widget\'ı bildirim çekmecesinde göster + Değişiklik olduğunda gizle + Bir butonunu durumu değiştirildiğinde bildirim çekmecesini gizler + Durum göstergesini gizle + Power widget göstergelerini gizle + Kaydırma çubuğunu gizle + Gösterilebilir alana sığmayacak kadar çok buton olduğunda kaydırma çubuğunu gösterme + Widget butonları + Power widget içerisinde görüntülenecek olan butonları seç + Widget buton sıralaması + Power diget içerisinde görüntülenecek olan butonları sırasını değiştir + Butonlar + Kablosuz ağı aç/kapa + Bluetooth\'u aç/kapa + GPS\'i aç/kapa + Sesi aç/kapa + Parlaklık modu değiştir + Senkronizasyonu aç/kapa + Kablosuz Ağ Erişim noktası aç/kapa + Ekran zamanaşımı + Mobil Veri + Ekran kilidini aç/kapa + 2G/3G ağ seçimi + Ekran yön değiştirmeyi aç/kapa + Uçak modunu aç/kapa + LED flaşı aç/kapa + Uyku moduna geç + Medya: Çalıştır/Durdur + Medya: Önceki parça + Medya: Sonraki parça + WiMAX\'i aç/kapa + Buton modları + Parlaklık modları + Parlaklık modu değiştirme butonunun modları nasıl değiştireceğini seç + Otomatik + Loş + Ağ modları + Ağ modu değiştirme butonunu modları nasıl değiştireceğini seç + Ekran zamanaşımı modu + Ekran zamanaşımı değiştirme butonunun modları nasıl değiştireceğini seç + Ses modları + Ses modu değiştirme düğmesinin modları nasıl değiştireceğini seç + Sessiz + Titreşim + Sesli + Sesli+Titreşim + Flaş modu + Yüksek parlaklık / ölüm ışını modunu seç + Haptic geri besleme + Haptic geri beslemeyi (doknunca titreşim) aç/kapa + + + diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 6305712fb..c6e4df64e 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -1580,4 +1580,61 @@ "取消" "%d%%" "其他系统更新" + 新的WIFI驱动 + 开启新WI-FI驱动 + 开启双麦克降噪 + 自动识别耳机麦 + 通知栏设置 + 电源部件 + 显示电源部件 + 在通知栏抽屉中显示电源部件工具条 + 自动隐藏 + 点击插件按钮后自动隐藏下拉列表 + 隐藏指示器 + 隐藏电源部件按钮上的指示器 + 隐藏滚动条 + 按钮数量超过可显示的最大值时隐藏滚动条 + 插件选择 + 选择你想显示的小插件 + 插件按钮顺序 + 对插件进行排序 + 按钮 + 开启 Wi-Fi + 开启蓝牙 + 开启 GPS + 声音选项 + 切换亮度 + 自动同步 + 开启Wi-Fi AP + 背光时间 + 数据连接 + 锁屏 + 切换 2G/3G + 屏幕自动旋转 + 飞行模式 + 手电筒 + 睡眠模式 + 媒体:切换播放/暂停 + 媒体:跳转到上一首 + 媒体:跳转到下一首 + 开启 WiMAX + 按钮模式 + 亮度模式 + 选择亮度按钮改变模式 + 自动 + 变暗 + 网络模式 + 选择按钮对应的网络模式 + 背光时间 + 选择按按钮对应的背光时间 + 声音模式 + 选择声音按钮对应的模式 + 静音 + 振动 + 声音 + 声音+震动 + 闪光灯 + 选择高亮/低亮 + 触控反馈 + 启用/禁用触控反馈 diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 96be4171a..6935e0a54 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -749,4 +749,81 @@ 2 + + + + @string/cm_brightness_mode_auto + @string/cm_brightness_mode_dim + 25% + 50% + 75% + 100% + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + 2G/3G+2G + 2G/3G Only + 2G/3G Only/3G+2G + + + + 0 + 1 + 2 + + + + 15s/1m/5m + 30s/2m/5m + + + + 0 + 1 + + + + @string/cm_sound_mode_silent + @string/cm_sound_mode_vibrate + @string/cm_sound_mode_sound + @string/cm_sound_mode_soundVibrate + + + + 0 + 1 + 2 + 3 + + + + Normal + High / Death Ray + + + + 0 + 1 + + + + Global settings + On + Off + + + + 2 + 1 + 0 + diff --git a/res/values/colors.xml b/res/values/colors.xml index 2bba93767..955420b16 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -32,4 +32,5 @@ #20ffffff @android:color/holo_blue_light - \ No newline at end of file + #e0103010 + diff --git a/res/values/config.xml b/res/values/config.xml index 4119b6a06..05f93c785 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -22,4 +22,7 @@ + + true + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 9649ed3ac..8d4e56f4a 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -34,4 +34,9 @@ 8dip 100sp + + + 64dip + + 128dip diff --git a/res/values/strings.xml b/res/values/strings.xml index c3c615b10..c79f6115f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1584,6 +1584,10 @@ alog [CHAR LIMIT=none] --> Audio settings for the attached dock + Use echo cancelling microphone + + Use headset microphone + Dial pad touch tones Touch sounds @@ -1933,9 +1937,9 @@ alog [CHAR LIMIT=none] --> Lets you transfer media files on Windows, or using Android File Transfer on Mac (see www.android.com/filetransfer) - Camera (PTP) + Mass Storage - Lets you transfer photos using camera software, and transfer any files on computers that don\'t support MTP + Legacy mode for mounting storage. "Install file-transfer tools" @@ -3892,4 +3896,83 @@ found in the list of installed apps. "system_update_settings_list_item_title" in this project. [CHAR LIMIT=25] --> Additional system updates + + CPU + Proceed with Caution + These settings are included for experimentation and any changes made to them have the potential to cause instability, crashes, data loss or hardware failures.\n\nWe request you do not file bug reports if any of these settings have been changed from the defaults. + Current CPU frequency + CPU governor + %S + Minimum CPU frequency + %s + Maximum CPU frequency + %s + Set on boot + Restore the processor settings on boot + + + Notification Drawer + System interface + + Battery percentage + + + Notification drawer + + + Power widget + Show power widget + Show the power widget in the notification drawer + Hide on change + Hide the notification drawer after toggling a widget button + Hide indicator + Hide the power widget indicators + Hide scrollbar + Hide the scrollbar when more than the maximum number of widget buttons are present + Widget buttons + Select which buttons to display in the power widget + Widget button order + Select the order of the buttons in the power widget + Buttons + Toggle Wi-Fi + Toggle Bluetooth + Toggle GPS + Toggle Sound + Toggle Brightness + Toggle Sync + Toggle Wi-Fi AP + Toggle Screentimeout + Toggle Mobiledata + Toggle Lockscreen + Toggle 2G/3G + Toggle Orientation + Toggle Airplane mode + Toggle LED flashlight + Go to sleep + Media: Toggle Play/Pause + Media: Skip to Previous + Media: Skip to Next + Toggle WiMAX + Button modes + Brightness modes + Choose how the brightness button changes modes + Auto + Dim + Network modes + Choose how the NetworkMode button changes modes + Screentimeout modes + Choose how the Screentimeout button changes modes + Sound modes + Choose how the sound button changes modes + Silent + Vibrate + Sound + Sound+Vibrate + Flash mode + Choose High / Death Ray + + + Haptic feedback + Enable/disable haptic feedback + diff --git a/res/xml/cpu_settings.xml b/res/xml/cpu_settings.xml new file mode 100644 index 000000000..9b609db8a --- /dev/null +++ b/res/xml/cpu_settings.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 68e24c402..c903ba0e5 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -46,6 +46,11 @@ android:entries="@array/hdcp_checking_titles" android:entryValues="@array/hdcp_checking_values" /> + + - - + --> - + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/power_widget_settings.xml b/res/xml/power_widget_settings.xml new file mode 100644 index 000000000..37c635e0d --- /dev/null +++ b/res/xml/power_widget_settings.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 50b30866b..d44d640fe 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -114,6 +114,14 @@ + +
+ +
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml index a61e0e11f..8223a5983 100644 --- a/res/xml/sound_settings.xml +++ b/res/xml/sound_settings.xml @@ -68,6 +68,16 @@ + + + + + + + + + + + + + diff --git a/src/com/android/settings/CPUSettings.java b/src/com/android/settings/CPUSettings.java new file mode 100644 index 000000000..b3c57354b --- /dev/null +++ b/src/com/android/settings/CPUSettings.java @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2012 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceScreen; +import android.util.Log; + +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; + +// +// CPU Related Settings +// +public class CPUSettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener { + + public static final String FREQ_CUR_PREF = "pref_cpu_freq_cur";; + public static final String SCALE_CUR_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"; + public static final String FREQINFO_CUR_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq"; + private static String FREQ_CUR_FILE = SCALE_CUR_FILE; + public static final String GOV_PREF = "pref_cpu_gov"; + public static final String GOV_LIST_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"; + public static final String GOV_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"; + public static final String FREQ_MIN_PREF = "pref_cpu_freq_min"; + public static final String FREQ_MAX_PREF = "pref_cpu_freq_max"; + public static final String FREQ_LIST_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"; + public static final String FREQ_MAX_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"; + public static final String FREQ_MIN_FILE = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"; + public static final String SOB_PREF = "pref_cpu_set_on_boot"; + + private static final String TAG = "CPUSettings"; + + private String mGovernorFormat; + private String mMinFrequencyFormat; + private String mMaxFrequencyFormat; + + private Preference mCurFrequencyPref; + private ListPreference mGovernorPref; + private ListPreference mMinFrequencyPref; + private ListPreference mMaxFrequencyPref; + + private AlertDialog alertDialog; + + private class CurCPUThread extends Thread { + private boolean mInterrupt = false; + + public void interrupt() { + mInterrupt = true; + } + + @Override + public void run() { + try { + while (!mInterrupt) { + sleep(500); + final String curFreq = Utils.fileReadOneLine(FREQ_CUR_FILE); + mCurCPUHandler.sendMessage(mCurCPUHandler.obtainMessage(0, curFreq)); + } + } catch (InterruptedException e) { + } + } + }; + + private CurCPUThread mCurCPUThread = new CurCPUThread(); + + private Handler mCurCPUHandler = new Handler() { + public void handleMessage(Message msg) { + mCurFrequencyPref.setSummary(toMHz((String) msg.obj)); + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mGovernorFormat = getString(R.string.cpu_governors_summary); + mMinFrequencyFormat = getString(R.string.cpu_min_freq_summary); + mMaxFrequencyFormat = getString(R.string.cpu_max_freq_summary); + + String[] availableGovernors = Utils.fileReadOneLine(GOV_LIST_FILE).split(" "); + String[] availableFrequencies = new String[0]; + String availableFrequenciesLine = Utils.fileReadOneLine(FREQ_LIST_FILE); + if (availableFrequenciesLine != null) + availableFrequencies = availableFrequenciesLine.split(" "); + String[] frequencies; + String temp; + + frequencies = new String[availableFrequencies.length]; + for (int i = 0; i < frequencies.length; i++) { + frequencies[i] = toMHz(availableFrequencies[i]); + } + + addPreferencesFromResource(R.xml.cpu_settings); + + PreferenceScreen prefScreen = getPreferenceScreen(); + + // Governer + temp = Utils.fileReadOneLine(GOV_FILE); + + mGovernorPref = (ListPreference) prefScreen.findPreference(GOV_PREF); + mGovernorPref.setEntryValues(availableGovernors); + mGovernorPref.setEntries(availableGovernors); + mGovernorPref.setValue(temp); + mGovernorPref.setSummary(String.format(mGovernorFormat, temp)); + mGovernorPref.setOnPreferenceChangeListener(this); + + // Some systems might not use governors + if (temp == null) { + prefScreen.removePreference(mGovernorPref); + } + + if (!Utils.fileExists(FREQ_CUR_FILE)) { + FREQ_CUR_FILE = FREQINFO_CUR_FILE; + } + + // Cur frequency + temp = Utils.fileReadOneLine(FREQ_CUR_FILE); + + mCurFrequencyPref = (Preference) prefScreen.findPreference(FREQ_CUR_PREF); + mCurFrequencyPref.setSummary(toMHz(temp)); + + // Min frequency + temp = Utils.fileReadOneLine(FREQ_MIN_FILE); + + mMinFrequencyPref = (ListPreference) prefScreen.findPreference(FREQ_MIN_PREF); + mMinFrequencyPref.setEntryValues(availableFrequencies); + mMinFrequencyPref.setEntries(frequencies); + mMinFrequencyPref.setValue(temp); + mMinFrequencyPref.setSummary(String.format(mMinFrequencyFormat, toMHz(temp))); + mMinFrequencyPref.setOnPreferenceChangeListener(this); + + if (temp == null) { + prefScreen.removePreference(mMinFrequencyPref); + } + + // Max frequency + temp = Utils.fileReadOneLine(FREQ_MAX_FILE); + + mMaxFrequencyPref = (ListPreference) prefScreen.findPreference(FREQ_MAX_PREF); + mMaxFrequencyPref.setEntryValues(availableFrequencies); + mMaxFrequencyPref.setEntries(frequencies); + mMaxFrequencyPref.setValue(temp); + mMaxFrequencyPref.setSummary(String.format(mMaxFrequencyFormat, toMHz(temp))); + mMaxFrequencyPref.setOnPreferenceChangeListener(this); + + if (temp == null) { + prefScreen.removePreference(mMaxFrequencyPref); + } + + // Disable the min/max list if we dont have a list file + if (availableFrequenciesLine == null) { + mMinFrequencyPref.setEnabled(false); + mMaxFrequencyPref.setEnabled(false); + } + + mCurCPUThread.start(); + + /* Display the warning dialog */ + alertDialog = new AlertDialog.Builder(getActivity()).create(); + alertDialog.setTitle(R.string.cpu_settings_warning_title); + alertDialog.setMessage(getResources().getString(R.string.cpu_settings_warning)); + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, + getResources().getString(com.android.internal.R.string.ok), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + + alertDialog.show(); + } + + @Override + public void onResume() { + String temp; + + super.onResume(); + + temp = Utils.fileReadOneLine(FREQ_MAX_FILE); + mMaxFrequencyPref.setValue(temp); + mMaxFrequencyPref.setSummary(String.format(mMaxFrequencyFormat, toMHz(temp))); + + temp = Utils.fileReadOneLine(FREQ_MIN_FILE); + mMinFrequencyPref.setValue(temp); + mMinFrequencyPref.setSummary(String.format(mMinFrequencyFormat, toMHz(temp))); + + temp = Utils.fileReadOneLine(GOV_FILE); + mGovernorPref.setSummary(String.format(mGovernorFormat, temp)); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mCurCPUThread.interrupt(); + try { + mCurCPUThread.join(); + } catch (InterruptedException e) { + } + } + + public boolean onPreferenceChange(Preference preference, Object newValue) { + String fname = ""; + + if (newValue != null) { + if (preference == mGovernorPref) { + fname = GOV_FILE; + } else if (preference == mMinFrequencyPref) { + fname = FREQ_MIN_FILE; + } else if (preference == mMaxFrequencyPref) { + fname = FREQ_MAX_FILE; + } + + if (Utils.fileWriteOneLine(fname, (String) newValue)) { + if (preference == mGovernorPref) { + mGovernorPref.setSummary(String.format(mGovernorFormat, (String) newValue)); + } else if (preference == mMinFrequencyPref) { + mMinFrequencyPref.setSummary(String.format(mMinFrequencyFormat, + toMHz((String) newValue))); + } else if (preference == mMaxFrequencyPref) { + mMaxFrequencyPref.setSummary(String.format(mMaxFrequencyFormat, + toMHz((String) newValue))); + } + return true; + } else { + return false; + } + } + return false; + } + + private String toMHz(String mhzString) { + return new StringBuilder().append(Integer.valueOf(mhzString) / 1000).append(" MHz") + .toString(); + } +} diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 2ffae1960..84d34eaf6 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -70,6 +70,7 @@ public class DevelopmentSettings extends PreferenceFragment private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui"; private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale"; private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale"; + private static final String KEY_BATTERY_PERCENTAGE = "battery_percentage"; private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY = "immediately_destroy_activities"; @@ -93,6 +94,7 @@ public class DevelopmentSettings extends PreferenceFragment private CheckBoxPreference mForceHardwareUi; private ListPreference mWindowAnimationScale; private ListPreference mTransitionAnimationScale; + private CheckBoxPreference mBatteryPercentage; private CheckBoxPreference mImmediatelyDestroyActivities; private ListPreference mAppProcessLimit; @@ -129,6 +131,9 @@ public void onCreate(Bundle icicle) { mWindowAnimationScale.setOnPreferenceChangeListener(this); mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY); mTransitionAnimationScale.setOnPreferenceChangeListener(this); + mBatteryPercentage = (CheckBoxPreference) findPreference(KEY_BATTERY_PERCENTAGE); + mBatteryPercentage.setChecked((Settings.System.getInt(getActivity().getContentResolver(), + Settings.System.STATUS_BAR_BATTERY, 0) == 1)); mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference( IMMEDIATELY_DESTROY_ACTIVITIES_KEY); @@ -456,8 +461,10 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen writeShowAllANRsOptions(); } else if (preference == mForceHardwareUi) { writeHardwareUiOptions(); + } else if (preference == mBatteryPercentage) { + Settings.System.putInt(getActivity().getContentResolver(), + Settings.System.STATUS_BAR_BATTERY, mBatteryPercentage.isChecked() ? 1 : 0); } - return false; } diff --git a/src/com/android/settings/PowerWidget.java b/src/com/android/settings/PowerWidget.java new file mode 100644 index 000000000..4c84080b5 --- /dev/null +++ b/src/com/android/settings/PowerWidget.java @@ -0,0 +1,513 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import android.app.ListFragment; +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; +import android.preference.ListPreferenceMultiSelect; +import android.preference.Preference; +import android.preference.PreferenceCategory; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.android.internal.telephony.Phone; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +public class PowerWidget extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener { + private static final String TAG = "PowerWidget"; + + private static final String UI_EXP_WIDGET = "expanded_widget"; + + private static final String UI_EXP_WIDGET_HIDE_ONCHANGE = "expanded_hide_onchange"; + + private static final String UI_EXP_WIDGET_HIDE_INDICATOR = "expanded_hide_indicator"; + + private static final String UI_EXP_WIDGET_HIDE_SCROLLBAR = "expanded_hide_scrollbar"; + + private static final String UI_EXP_WIDGET_HAPTIC_FEEDBACK = "expanded_haptic_feedback"; + + private static final String UI_EXP_WIDGET_PICKER = "widget_picker"; + + private static final String UI_EXP_WIDGET_ORDER = "widget_order"; + + private CheckBoxPreference mPowerWidget; + + private CheckBoxPreference mPowerWidgetHideOnChange; + + private CheckBoxPreference mPowerWidgetIndicatorHide; + + private CheckBoxPreference mPowerWidgetHideScrollBar; + + private ListPreference mPowerWidgetHapticFeedback; + + private PreferenceScreen mPowerPicker; + + private PreferenceScreen mPowerOrder; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getPreferenceManager() != null) { + addPreferencesFromResource(R.xml.power_widget_settings); + + PreferenceScreen prefSet = getPreferenceScreen(); + + mPowerWidget = (CheckBoxPreference) prefSet.findPreference(UI_EXP_WIDGET); + mPowerWidgetHideOnChange = (CheckBoxPreference) prefSet + .findPreference(UI_EXP_WIDGET_HIDE_ONCHANGE); + mPowerWidgetHideScrollBar = (CheckBoxPreference) prefSet + .findPreference(UI_EXP_WIDGET_HIDE_SCROLLBAR); + mPowerWidgetIndicatorHide = (CheckBoxPreference) prefSet + .findPreference(UI_EXP_WIDGET_HIDE_INDICATOR); + mPowerWidgetHapticFeedback = (ListPreference) prefSet + .findPreference(UI_EXP_WIDGET_HAPTIC_FEEDBACK); + mPowerWidgetHapticFeedback.setOnPreferenceChangeListener(this); + + mPowerPicker = (PreferenceScreen) prefSet.findPreference(UI_EXP_WIDGET_PICKER); + mPowerOrder = (PreferenceScreen) prefSet.findPreference(UI_EXP_WIDGET_ORDER); + + mPowerWidget.setChecked((Settings.System.getInt(getActivity().getApplicationContext() + .getContentResolver(), + Settings.System.EXPANDED_VIEW_WIDGET, 1) == 1)); + mPowerWidgetHideOnChange.setChecked((Settings.System.getInt(getActivity() + .getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_ONCHANGE, 0) == 1)); + mPowerWidgetHideScrollBar.setChecked((Settings.System.getInt(getActivity() + .getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_SCROLLBAR, 0) == 1)); + mPowerWidgetIndicatorHide.setChecked((Settings.System.getInt(getActivity() + .getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_INDICATOR, 0) == 1)); + mPowerWidgetHapticFeedback.setValue(Integer.toString(Settings.System.getInt( + getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HAPTIC_FEEDBACK, 2))); + } + } + + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference == mPowerWidgetHapticFeedback) { + int intValue = Integer.parseInt((String) newValue); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HAPTIC_FEEDBACK, intValue); + return true; + } + return false; + } + + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + boolean value; + + if (preference == mPowerWidget) { + value = mPowerWidget.isChecked(); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_VIEW_WIDGET, + value ? 1 : 0); + } else if (preference == mPowerWidgetHideOnChange) { + value = mPowerWidgetHideOnChange.isChecked(); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_ONCHANGE, + value ? 1 : 0); + } else if (preference == mPowerWidgetHideScrollBar) { + value = mPowerWidgetHideScrollBar.isChecked(); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_SCROLLBAR, + value ? 1 : 0); + } else if (preference == mPowerWidgetIndicatorHide) { + value = mPowerWidgetIndicatorHide.isChecked(); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_HIDE_INDICATOR, + value ? 1 : 0); + } else { + // If we didn't handle it, let preferences handle it. + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + return true; + } + + public static class PowerWidgetChooser extends SettingsPreferenceFragment + implements Preference.OnPreferenceChangeListener { + + public PowerWidgetChooser() { + } + + private static final String TAG = "PowerWidgetActivity"; + + private static final String BUTTONS_CATEGORY = "pref_buttons"; + private static final String SELECT_BUTTON_KEY_PREFIX = "pref_button_"; + + private static final String EXP_BRIGHTNESS_MODE = "pref_brightness_mode"; + private static final String EXP_NETWORK_MODE = "pref_network_mode"; + private static final String EXP_SCREENTIMEOUT_MODE = "pref_screentimeout_mode"; + private static final String EXP_RING_MODE = "pref_ring_mode"; + private static final String EXP_FLASH_MODE = "pref_flash_mode"; + + private HashMap mCheckBoxPrefs = new HashMap(); + + ListPreferenceMultiSelect mBrightnessMode; + ListPreference mNetworkMode; + ListPreference mScreentimeoutMode; + ListPreferenceMultiSelect mRingMode; + ListPreference mFlashMode; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + addPreferencesFromResource(R.xml.power_widget); + + PreferenceScreen prefSet = getPreferenceScreen(); + + if (getActivity().getApplicationContext() == null) { + return; + } + + mBrightnessMode = (ListPreferenceMultiSelect) prefSet + .findPreference(EXP_BRIGHTNESS_MODE); + mBrightnessMode.setValue(Settings.System.getString(getActivity() + .getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_BRIGHTNESS_MODE)); + mBrightnessMode.setOnPreferenceChangeListener(this); + mNetworkMode = (ListPreference) prefSet.findPreference(EXP_NETWORK_MODE); + mNetworkMode.setOnPreferenceChangeListener(this); + mScreentimeoutMode = (ListPreference) prefSet.findPreference(EXP_SCREENTIMEOUT_MODE); + mScreentimeoutMode.setOnPreferenceChangeListener(this); + mRingMode = (ListPreferenceMultiSelect) prefSet.findPreference(EXP_RING_MODE); + mRingMode.setValue(Settings.System.getString(getActivity().getApplicationContext() + .getContentResolver(), Settings.System.EXPANDED_RING_MODE)); + mRingMode.setOnPreferenceChangeListener(this); + mFlashMode = (ListPreference) prefSet.findPreference(EXP_FLASH_MODE); + mFlashMode.setOnPreferenceChangeListener(this); + + PreferenceCategory prefButtons = (PreferenceCategory) prefSet + .findPreference(BUTTONS_CATEGORY); + + // empty our preference category and set it to order as added + prefButtons.removeAll(); + prefButtons.setOrderingAsAdded(false); + + // emtpy our checkbox map + mCheckBoxPrefs.clear(); + + // get our list of buttons + ArrayList buttonList = PowerWidgetUtil.getButtonListFromString(PowerWidgetUtil + .getCurrentButtons(getActivity().getApplicationContext())); + + // Don't show WiMAX option if not supported + /* + * boolean isWimaxEnabled = WimaxHelper.isWimaxSupported(this); if + * (!isWimaxEnabled) { + * PowerWidgetUtil.BUTTONS.remove(PowerWidgetUtil.BUTTON_WIMAX); } + */ + + // fill that checkbox map! + for (PowerWidgetUtil.ButtonInfo button : PowerWidgetUtil.BUTTONS.values()) { + // create a checkbox + CheckBoxPreference cb = new CheckBoxPreference(getActivity() + .getApplicationContext()); + + // set a dynamic key based on button id + cb.setKey(SELECT_BUTTON_KEY_PREFIX + button.getId()); + + // set vanity info + cb.setTitle(button.getTitleResId()); + + // set our checked state + if (buttonList.contains(button.getId())) { + cb.setChecked(true); + } else { + cb.setChecked(false); + } + + // add to our prefs set + mCheckBoxPrefs.put(cb, button.getId()); + + // specific checks for availability on some platforms + if (PowerWidgetUtil.BUTTON_FLASHLIGHT.equals(button.getId()) && + !getResources().getBoolean(R.bool.has_led_flash)) { // disable flashlight if it's not supported + cb.setEnabled(false); + mFlashMode.setEnabled(false); + } else if (PowerWidgetUtil.BUTTON_NETWORKMODE.equals(button.getId())) { + // some phones run on networks not supported by this button, + // so disable it + int network_state = -99; + + try { + network_state = Settings.Secure.getInt(getActivity() + .getApplicationContext().getContentResolver(), + Settings.Secure.PREFERRED_NETWORK_MODE); + } catch (Settings.SettingNotFoundException e) { + Log.e(TAG, "Unable to retrieve PREFERRED_NETWORK_MODE", e); + } + + switch (network_state) { + // list of supported network modes + case Phone.NT_MODE_WCDMA_PREF: + case Phone.NT_MODE_WCDMA_ONLY: + case Phone.NT_MODE_GSM_UMTS: + case Phone.NT_MODE_GSM_ONLY: + break; + default: + cb.setEnabled(false); + break; + } + } + /* + * else if (PowerWidgetUtil.BUTTON_WIMAX.equals(button.getId())) + * { if (!isWimaxEnabled) { cb.setEnabled(false); } } + */ + + // add to the category + prefButtons.addPreference(cb); + } + } + + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, + Preference preference) { + // we only modify the button list if it was one of our checks that + // was clicked + boolean buttonWasModified = false; + ArrayList buttonList = new ArrayList(); + for (Map.Entry entry : mCheckBoxPrefs.entrySet()) { + if (entry.getKey().isChecked()) { + buttonList.add(entry.getValue()); + } + + if (preference == entry.getKey()) { + buttonWasModified = true; + } + } + + if (buttonWasModified) { + // now we do some wizardry and reset the button list + PowerWidgetUtil.saveCurrentButtons(getActivity().getApplicationContext(), + PowerWidgetUtil.mergeInNewButtonString( + PowerWidgetUtil.getCurrentButtons(getActivity() + .getApplicationContext()), PowerWidgetUtil + .getButtonStringFromList(buttonList))); + return true; + } + + return false; + } + + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference == mBrightnessMode) { + Settings.System.putString(getActivity().getApplicationContext() + .getContentResolver(), Settings.System.EXPANDED_BRIGHTNESS_MODE, + (String) newValue); + } else if (preference == mNetworkMode) { + int value = Integer.valueOf((String) newValue); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_NETWORK_MODE, value); + } else if (preference == mScreentimeoutMode) { + int value = Integer.valueOf((String) newValue); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_SCREENTIMEOUT_MODE, value); + } else if (preference == mRingMode) { + Settings.System.putString(getActivity().getApplicationContext() + .getContentResolver(), Settings.System.EXPANDED_RING_MODE, + (String) newValue); + } else if (preference == mFlashMode) { + int value = Integer.valueOf((String) newValue); + Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(), + Settings.System.EXPANDED_FLASH_MODE, value); + } + return true; + } + } + + public static class PowerWidgetOrder extends ListFragment + { + private static final String TAG = "PowerWidgetOrderActivity"; + + private ListView mButtonList; + private ButtonAdapter mButtonAdapter; + View mContentView = null; + Context mContext; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mContentView = inflater.inflate(R.layout.order_power_widget_buttons_activity, null); + return mContentView; + } + + /** Called when the activity is first created. */ + // @Override + // public void onCreate(Bundle icicle) + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + mContext = getActivity().getApplicationContext(); + + mButtonList = getListView(); + ((TouchInterceptor) mButtonList).setDropListener(mDropListener); + mButtonAdapter = new ButtonAdapter(mContext); + setListAdapter(mButtonAdapter); + } + + @Override + public void onDestroy() { + ((TouchInterceptor) mButtonList).setDropListener(null); + setListAdapter(null); + super.onDestroy(); + } + + @Override + public void onResume() { + super.onResume(); + // reload our buttons and invalidate the views for redraw + mButtonAdapter.reloadButtons(); + mButtonList.invalidateViews(); + } + + private TouchInterceptor.DropListener mDropListener = new TouchInterceptor.DropListener() { + public void drop(int from, int to) { + // get the current button list + ArrayList buttons = PowerWidgetUtil.getButtonListFromString( + PowerWidgetUtil.getCurrentButtons(mContext)); + + // move the button + if (from < buttons.size()) { + String button = buttons.remove(from); + + if (to <= buttons.size()) { + buttons.add(to, button); + + // save our buttons + PowerWidgetUtil.saveCurrentButtons(mContext, + PowerWidgetUtil.getButtonStringFromList(buttons)); + + // tell our adapter/listview to reload + mButtonAdapter.reloadButtons(); + mButtonList.invalidateViews(); + } + } + } + }; + + private class ButtonAdapter extends BaseAdapter { + private Context mContext; + private Resources mSystemUIResources = null; + private LayoutInflater mInflater; + private ArrayList mButtons; + + public ButtonAdapter(Context c) { + mContext = c; + mInflater = LayoutInflater.from(mContext); + + PackageManager pm = mContext.getPackageManager(); + if (pm != null) { + try { + mSystemUIResources = pm.getResourcesForApplication("com.android.systemui"); + } catch (Exception e) { + mSystemUIResources = null; + Log.e(TAG, "Could not load SystemUI resources", e); + } + } + + reloadButtons(); + } + + public void reloadButtons() { + ArrayList buttons = PowerWidgetUtil.getButtonListFromString( + PowerWidgetUtil.getCurrentButtons(mContext)); + + mButtons = new ArrayList(); + for (String button : buttons) { + if (PowerWidgetUtil.BUTTONS.containsKey(button)) { + mButtons.add(PowerWidgetUtil.BUTTONS.get(button)); + } + } + } + + public int getCount() { + return mButtons.size(); + } + + public Object getItem(int position) { + return mButtons.get(position); + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + final View v; + if (convertView == null) { + v = mInflater.inflate(R.layout.order_power_widget_button_list_item, null); + } else { + v = convertView; + } + + PowerWidgetUtil.ButtonInfo button = mButtons.get(position); + + final TextView name = (TextView) v.findViewById(R.id.name); + final ImageView icon = (ImageView) v.findViewById(R.id.icon); + + name.setText(button.getTitleResId()); + + // assume no icon first + icon.setVisibility(View.GONE); + + // attempt to load the icon for this button + if (mSystemUIResources != null) { + int resId = mSystemUIResources.getIdentifier(button.getIcon(), null, null); + if (resId > 0) { + try { + Drawable d = mSystemUIResources.getDrawable(resId); + icon.setVisibility(View.VISIBLE); + icon.setImageDrawable(d); + } catch (Exception e) { + Log.e(TAG, "Error retrieving icon drawable", e); + } + } + } + + return v; + } + } + } + +} diff --git a/src/com/android/settings/PowerWidgetEnabler.java b/src/com/android/settings/PowerWidgetEnabler.java new file mode 100644 index 000000000..28dec42f5 --- /dev/null +++ b/src/com/android/settings/PowerWidgetEnabler.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.provider.Settings; +import android.content.Context; +import android.widget.CompoundButton; +import android.widget.Switch; + +import com.android.settings.SwitchWidget; + +public class PowerWidgetEnabler extends SwitchWidget { + public PowerWidgetEnabler(Context context, Switch switch_) { + mContext = context; + mSwitch = switch_; + } + + public void resume() { + mSwitch.setOnCheckedChangeListener(this); + } + + public void pause() { + mSwitch.setOnCheckedChangeListener(null); + } + + public void setState(Switch switch_) { + int isEnabled = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.EXPANDED_VIEW_WIDGET, 1); + mSwitch.setChecked(isEnabled == 1 ? true : false); + return; + } + + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // Do nothing if called as a result of a state machine event + if (mStateMachineEvent) { + return; + } + Settings.System.putInt(mContext.getContentResolver(), Settings.System.EXPANDED_VIEW_WIDGET, + isChecked ? 1 : 0); + return; + } + + private void setSwitchChecked(boolean checked) { + if (checked != mSwitch.isChecked()) { + mStateMachineEvent = true; + mSwitch.setChecked(checked); + mStateMachineEvent = false; + } + } +} diff --git a/src/com/android/settings/PowerWidgetUtil.java b/src/com/android/settings/PowerWidgetUtil.java new file mode 100644 index 000000000..52364d8c9 --- /dev/null +++ b/src/com/android/settings/PowerWidgetUtil.java @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import com.android.settings.R; + +import android.content.Context; +/* import android.net.wimax.WimaxHelper; */ +import android.provider.Settings; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + +/** + * THIS CLASS'S DATA MUST BE KEPT UP-TO-DATE WITH THE DATA IN + * com.android.systemui.statusbar.powerwidget.PowerWidget AND + * com.android.systemui.statusbar.powerwidget.PowerButton IN THE SystemUI + * PACKAGE. + */ +public class PowerWidgetUtil { + public static final String BUTTON_WIFI = "toggleWifi"; + public static final String BUTTON_GPS = "toggleGPS"; + public static final String BUTTON_BLUETOOTH = "toggleBluetooth"; + public static final String BUTTON_BRIGHTNESS = "toggleBrightness"; + public static final String BUTTON_SOUND = "toggleSound"; + public static final String BUTTON_SYNC = "toggleSync"; + public static final String BUTTON_WIFIAP = "toggleWifiAp"; + public static final String BUTTON_SCREENTIMEOUT = "toggleScreenTimeout"; + public static final String BUTTON_MOBILEDATA = "toggleMobileData"; + public static final String BUTTON_LOCKSCREEN = "toggleLockScreen"; + public static final String BUTTON_NETWORKMODE = "toggleNetworkMode"; + public static final String BUTTON_AUTOROTATE = "toggleAutoRotate"; + public static final String BUTTON_AIRPLANE = "toggleAirplane"; + public static final String BUTTON_FLASHLIGHT = "toggleFlashlight"; + public static final String BUTTON_SLEEP = "toggleSleepMode"; + public static final String BUTTON_MEDIA_PLAY_PAUSE = "toggleMediaPlayPause"; + public static final String BUTTON_MEDIA_PREVIOUS = "toggleMediaPrevious"; + public static final String BUTTON_MEDIA_NEXT = "toggleMediaNext"; + public static final String BUTTON_WIMAX = "toggleWimax"; + + public static final HashMap BUTTONS = new HashMap(); + static { + BUTTONS.put(BUTTON_AIRPLANE, new PowerWidgetUtil.ButtonInfo( + BUTTON_AIRPLANE, R.string.title_toggle_airplane, + "com.android.systemui:drawable/stat_airplane_on")); + BUTTONS.put(BUTTON_AUTOROTATE, new PowerWidgetUtil.ButtonInfo( + BUTTON_AUTOROTATE, R.string.title_toggle_autorotate, + "com.android.systemui:drawable/stat_orientation_on")); + BUTTONS.put(BUTTON_BLUETOOTH, new PowerWidgetUtil.ButtonInfo( + BUTTON_BLUETOOTH, R.string.title_toggle_bluetooth, + "com.android.systemui:drawable/stat_bluetooth_on")); + BUTTONS.put(BUTTON_BRIGHTNESS, new PowerWidgetUtil.ButtonInfo( + BUTTON_BRIGHTNESS, R.string.title_toggle_brightness, + "com.android.systemui:drawable/stat_brightness_on")); + BUTTONS.put(BUTTON_FLASHLIGHT, new PowerWidgetUtil.ButtonInfo( + BUTTON_FLASHLIGHT, R.string.title_toggle_flashlight, + "com.android.systemui:drawable/stat_flashlight_on")); + BUTTONS.put(BUTTON_GPS, new PowerWidgetUtil.ButtonInfo( + BUTTON_GPS, R.string.title_toggle_gps, "com.android.systemui:drawable/stat_gps_on")); + BUTTONS.put(BUTTON_LOCKSCREEN, new PowerWidgetUtil.ButtonInfo( + BUTTON_LOCKSCREEN, R.string.title_toggle_lockscreen, + "com.android.systemui:drawable/stat_lock_screen_on")); + BUTTONS.put(BUTTON_MOBILEDATA, new PowerWidgetUtil.ButtonInfo( + BUTTON_MOBILEDATA, R.string.title_toggle_mobiledata, + "com.android.systemui:drawable/stat_data_on")); + BUTTONS.put(BUTTON_NETWORKMODE, new PowerWidgetUtil.ButtonInfo( + BUTTON_NETWORKMODE, R.string.title_toggle_networkmode, + "com.android.systemui:drawable/stat_2g3g_on")); + BUTTONS.put(BUTTON_SCREENTIMEOUT, new PowerWidgetUtil.ButtonInfo( + BUTTON_SCREENTIMEOUT, R.string.title_toggle_screentimeout, + "com.android.systemui:drawable/stat_screen_timeout_on")); + BUTTONS.put(BUTTON_SLEEP, new PowerWidgetUtil.ButtonInfo( + BUTTON_SLEEP, R.string.title_toggle_sleep, + "com.android.systemui:drawable/stat_sleep")); + BUTTONS.put(BUTTON_SOUND, new PowerWidgetUtil.ButtonInfo( + BUTTON_SOUND, R.string.title_toggle_sound, + "com.android.systemui:drawable/stat_ring_on")); + BUTTONS.put(BUTTON_SYNC, new PowerWidgetUtil.ButtonInfo( + BUTTON_SYNC, R.string.title_toggle_sync, + "com.android.systemui:drawable/stat_sync_on")); + BUTTONS.put(BUTTON_WIFI, new PowerWidgetUtil.ButtonInfo( + BUTTON_WIFI, R.string.title_toggle_wifi, + "com.android.systemui:drawable/stat_wifi_on")); + BUTTONS.put(BUTTON_WIFIAP, new PowerWidgetUtil.ButtonInfo( + BUTTON_WIFIAP, R.string.title_toggle_wifiap, + "com.android.systemui:drawable/stat_wifi_ap_on")); + BUTTONS.put(BUTTON_MEDIA_PREVIOUS, new PowerWidgetUtil.ButtonInfo( + BUTTON_MEDIA_PREVIOUS, R.string.title_toggle_media_previous, + "com.android.systemui:drawable/stat_media_previous")); + BUTTONS.put(BUTTON_MEDIA_PLAY_PAUSE, new PowerWidgetUtil.ButtonInfo( + BUTTON_MEDIA_PLAY_PAUSE, R.string.title_toggle_media_play_pause, + "com.android.systemui:drawable/stat_media_play")); + BUTTONS.put(BUTTON_MEDIA_NEXT, new PowerWidgetUtil.ButtonInfo( + BUTTON_MEDIA_NEXT, R.string.title_toggle_media_next, + "com.android.systemui:drawable/stat_media_next")); + BUTTONS.put(BUTTON_WIMAX, new PowerWidgetUtil.ButtonInfo( + BUTTON_WIMAX, R.string.title_toggle_wimax, + "com.android.systemui:drawable/stat_wimax_on")); + } + + private static final String BUTTON_DELIMITER = "|"; + private static final String BUTTONS_DEFAULT = BUTTON_WIFI + + BUTTON_DELIMITER + BUTTON_BLUETOOTH + + BUTTON_DELIMITER + BUTTON_GPS + + BUTTON_DELIMITER + BUTTON_SOUND; + + public static String getCurrentButtons(Context context) { + String buttons = Settings.System.getString(context.getContentResolver(), + Settings.System.WIDGET_BUTTONS); + if (buttons == null) { + buttons = BUTTONS_DEFAULT; + // Add the WiMAX button if it's supported + /* + * if (WimaxHelper.isWimaxSupported(context)) { buttons += + * BUTTON_DELIMITER + BUTTON_WIMAX; } + */ + // And the flashlight too if available + if (context.getResources().getBoolean(R.bool.has_led_flash)) { + buttons += BUTTON_DELIMITER + BUTTON_FLASHLIGHT; + } + } + return buttons; + } + + public static void saveCurrentButtons(Context context, String buttons) { + Settings.System.putString(context.getContentResolver(), + Settings.System.WIDGET_BUTTONS, buttons); + } + + public static String mergeInNewButtonString(String oldString, String newString) { + ArrayList oldList = getButtonListFromString(oldString); + ArrayList newList = getButtonListFromString(newString); + ArrayList mergedList = new ArrayList(); + + // add any items from oldlist that are in new list + for (String button : oldList) { + if (newList.contains(button)) { + mergedList.add(button); + } + } + + // append anything in newlist that isn't already in the merged list to + // the end of the list + for (String button : newList) { + if (!mergedList.contains(button)) { + mergedList.add(button); + } + } + + // return merged list + return getButtonStringFromList(mergedList); + } + + public static ArrayList getButtonListFromString(String buttons) { + return new ArrayList(Arrays.asList(buttons.split("\\|"))); + } + + public static String getButtonStringFromList(ArrayList buttons) { + if (buttons == null || buttons.size() <= 0) { + return ""; + } else { + String s = buttons.get(0); + for (int i = 1; i < buttons.size(); i++) { + s += BUTTON_DELIMITER + buttons.get(i); + } + return s; + } + } + + public static class ButtonInfo { + private String mId; + private int mTitleResId; + private String mIcon; + + public ButtonInfo(String id, int titleResId, String icon) { + mId = id; + mTitleResId = titleResId; + mIcon = icon; + } + + public String getId() { + return mId; + } + + public int getTitleResId() { + return mTitleResId; + } + + public String getIcon() { + return mIcon; + } + } +} diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java index cf7cd0aa9..b5336f8ad 100644 --- a/src/com/android/settings/SoundSettings.java +++ b/src/com/android/settings/SoundSettings.java @@ -34,6 +34,7 @@ import android.os.Handler; import android.os.Message; import android.os.Vibrator; +import android.os.SystemProperties; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; @@ -59,6 +60,8 @@ public class SoundSettings extends SettingsPreferenceFragment implements private static final String KEY_VIBRATE = "vibrate_on_ring"; private static final String KEY_RING_VOLUME = "ring_volume"; private static final String KEY_MUSICFX = "musicfx"; + private static final String KEY_DUALMIC = "dualmic"; + private static final String KEY_HEADSETMIC = "headsetmic"; private static final String KEY_DTMF_TONE = "dtmf_tone"; private static final String KEY_SOUND_EFFECTS = "sound_effects"; private static final String KEY_HAPTIC_FEEDBACK = "haptic_feedback"; @@ -69,6 +72,9 @@ public class SoundSettings extends SettingsPreferenceFragment implements private static final String KEY_NOTIFICATION_SOUND = "notification_sound"; private static final String KEY_CATEGORY_CALLS = "category_calls"; + private static final String DUALMIC_PROPERTY = "persist.sys.dualmic.enabled"; + private static final String HEADSETMIC_PROPERTY = "persist.sys.headsetmic.enabled"; + private static final String SILENT_MODE_OFF = "off"; private static final String SILENT_MODE_VIBRATE = "vibrate"; private static final String SILENT_MODE_MUTE = "mute"; @@ -83,6 +89,8 @@ public class SoundSettings extends SettingsPreferenceFragment implements private CheckBoxPreference mVibrateOnRing; private ListPreference mSilentMode; + private CheckBoxPreference mDualMic; + private CheckBoxPreference mHeadsetMic; private CheckBoxPreference mDtmfTone; private CheckBoxPreference mSoundEffects; private CheckBoxPreference mHapticFeedback; @@ -145,6 +153,12 @@ public void onCreate(Bundle savedInstanceState) { mVibrateOnRing = (CheckBoxPreference) findPreference(KEY_VIBRATE); mVibrateOnRing.setOnPreferenceChangeListener(this); + mDualMic = (CheckBoxPreference) findPreference(KEY_DUALMIC); + mDualMic.setChecked(SystemProperties.getBoolean(DUALMIC_PROPERTY, false)); + + mHeadsetMic = (CheckBoxPreference) findPreference(KEY_HEADSETMIC); + mHeadsetMic.setChecked(SystemProperties.getBoolean(HEADSETMIC_PROPERTY, false)); + mDtmfTone = (CheckBoxPreference) findPreference(KEY_DTMF_TONE); mDtmfTone.setPersistent(false); mDtmfTone.setChecked(Settings.System.getInt(resolver, @@ -338,6 +352,10 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen } else if (preference == mMusicFx) { // let the framework fire off the intent return false; + } else if (preference == mDualMic) { + SystemProperties.set(DUALMIC_PROPERTY, mDualMic.isChecked() ? "1" : "0"); + } else if (preference == mHeadsetMic) { + SystemProperties.set(HEADSETMIC_PROPERTY, mHeadsetMic.isChecked() ? "1" : "0"); } return true; diff --git a/src/com/android/settings/SwitchWidget.java b/src/com/android/settings/SwitchWidget.java new file mode 100644 index 000000000..320e415cd --- /dev/null +++ b/src/com/android/settings/SwitchWidget.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import java.util.concurrent.atomic.AtomicBoolean; + +import android.content.Context; +import android.widget.CompoundButton; +import android.widget.Switch; + +public class SwitchWidget implements CompoundButton.OnCheckedChangeListener { + public static Context mContext; + public Switch mSwitch; + public AtomicBoolean mConnected = new AtomicBoolean(false); + + public boolean mStateMachineEvent; + + /* + * public SwitchWidget(Context context, Switch switch_) { super(context, + * switch_); mContext = context; mSwitch = switch_; } + */ + public SwitchWidget() { + } + + public void resume() { + mSwitch.setOnCheckedChangeListener(this); + } + + public void pause() { + mSwitch.setOnCheckedChangeListener(null); + } + + public void setSwitch(Switch switch_) { + /* Stub! */ + if (mSwitch == switch_) + return; + mSwitch.setOnCheckedChangeListener(null); + mSwitch = switch_; + mSwitch.setOnCheckedChangeListener(this); + + setState(switch_); + } + + public void setState(Switch switch_) { + /* Stub */ + return; + } + + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + /* Stub! */ + return; + } + + private void setSwitchChecked(boolean checked) { + if (checked != mSwitch.isChecked()) { + mStateMachineEvent = true; + mSwitch.setChecked(checked); + mStateMachineEvent = false; + } + } +} diff --git a/src/com/android/settings/SystemSettings.java b/src/com/android/settings/SystemSettings.java new file mode 100644 index 000000000..7ea18b9af --- /dev/null +++ b/src/com/android/settings/SystemSettings.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2012 CyanogenMod + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.app.ActivityManagerNative; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.RemoteException; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.util.Log; + +public class SystemSettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener { + private static final String TAG = "SystemSettings"; + + private static final String KEY_BATTERY_PERCENTAGE = "battery_percentage"; + private CheckBoxPreference mBatteryPercentage; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.system_settings); + + PreferenceScreen prefSet = getPreferenceScreen(); + + mBatteryPercentage = (CheckBoxPreference) prefSet.findPreference(KEY_BATTERY_PERCENTAGE); + mBatteryPercentage.setChecked((Settings.System.getInt(getContentResolver(), + Settings.System.STATUS_BAR_BATTERY, 0) == 1)); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + boolean value; + + if (preference == mBatteryPercentage) { + value = mBatteryPercentage.isChecked(); + Settings.System.putInt(getContentResolver(), + Settings.System.STATUS_BAR_BATTERY, value ? 1 : 0); + return true; + } + return false; + } + + public boolean onPreferenceChange(Preference preference, Object objValue) { + return true; + } +} diff --git a/src/com/android/settings/TouchInterceptor.java b/src/com/android/settings/TouchInterceptor.java new file mode 100644 index 000000000..023a8cea9 --- /dev/null +++ b/src/com/android/settings/TouchInterceptor.java @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import com.android.settings.R; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; + +public class TouchInterceptor extends ListView { + + private ImageView mDragView; + private WindowManager mWindowManager; + private WindowManager.LayoutParams mWindowParams; + private int mDragPos; // which item is being dragged + private int mFirstDragPos; // where was the dragged item originally + private int mDragPoint; // at what offset inside the item did the user grab + // it + private int mCoordOffset; // the difference between screen coordinates and + // coordinates in this view + private DragListener mDragListener; + private DropListener mDropListener; + private int mUpperBound; + private int mLowerBound; + private int mHeight; + private Rect mTempRect = new Rect(); + private Bitmap mDragBitmap; + private final int mTouchSlop; + private int mItemHeightNormal; + private int mItemHeightExpanded; + private int mItemHeightHalf; + + public TouchInterceptor(Context context, AttributeSet attrs) { + super(context, attrs); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + Resources res = getResources(); + mItemHeightNormal = res.getDimensionPixelSize(R.dimen.normal_height); + mItemHeightHalf = mItemHeightNormal / 2; + mItemHeightExpanded = res.getDimensionPixelSize(R.dimen.expanded_height); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (mDragListener != null || mDropListener != null) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + int x = (int) ev.getX(); + int y = (int) ev.getY(); + int itemnum = pointToPosition(x, y); + if (itemnum == AdapterView.INVALID_POSITION) { + break; + } + ViewGroup item = (ViewGroup) getChildAt(itemnum - getFirstVisiblePosition()); + mDragPoint = y - item.getTop(); + mCoordOffset = ((int) ev.getRawY()) - y; + View dragger = item.findViewById(R.id.grabber); + Rect r = mTempRect; + dragger.getDrawingRect(r); + // The dragger icon itself is quite small, so pretend the + // touch area is bigger + if (x < r.right * 2) { + item.setDrawingCacheEnabled(true); + // Create a copy of the drawing cache so that it does + // not get recycled + // by the framework when the list tries to clean up + // memory + Bitmap bitmap = Bitmap.createBitmap(item.getDrawingCache()); + startDragging(bitmap, y); + mDragPos = itemnum; + mFirstDragPos = mDragPos; + mHeight = getHeight(); + int touchSlop = mTouchSlop; + mUpperBound = Math.min(y - touchSlop, mHeight / 3); + mLowerBound = Math.max(y + touchSlop, mHeight * 2 / 3); + return false; + } + stopDragging(); + break; + } + } + return super.onInterceptTouchEvent(ev); + } + + /* + * pointToPosition() doesn't consider invisible views, but we need to, so + * implement a slightly different version. + */ + private int myPointToPosition(int x, int y) { + + if (y < 0) { + // when dragging off the top of the screen, calculate position + // by going back from a visible item + int pos = myPointToPosition(x, y + mItemHeightNormal); + if (pos > 0) { + return pos - 1; + } + } + + Rect frame = mTempRect; + final int count = getChildCount(); + for (int i = count - 1; i >= 0; i--) { + final View child = getChildAt(i); + child.getHitRect(frame); + if (frame.contains(x, y)) { + return getFirstVisiblePosition() + i; + } + } + return INVALID_POSITION; + } + + private int getItemForPosition(int y) { + int adjustedy = y - mDragPoint - mItemHeightHalf; + int pos = myPointToPosition(0, adjustedy); + if (pos >= 0) { + if (pos <= mFirstDragPos) { + pos += 1; + } + } else if (adjustedy < 0) { + // this shouldn't happen anymore now that myPointToPosition deals + // with this situation + pos = 0; + } + return pos; + } + + private void adjustScrollBounds(int y) { + if (y >= mHeight / 3) { + mUpperBound = mHeight / 3; + } + if (y <= mHeight * 2 / 3) { + mLowerBound = mHeight * 2 / 3; + } + } + + /* + * Restore size and visibility for all listitems + */ + private void unExpandViews(boolean deletion) { + for (int i = 0;; i++) { + View v = getChildAt(i); + if (v == null) { + if (deletion) { + // HACK force update of mItemCount + int position = getFirstVisiblePosition(); + int y = getChildAt(0).getTop(); + setAdapter(getAdapter()); + setSelectionFromTop(position, y); + // end hack + } + layoutChildren(); // force children to be recreated where needed + v = getChildAt(i); + if (v == null) { + break; + } + } + ViewGroup.LayoutParams params = v.getLayoutParams(); + params.height = mItemHeightNormal; + v.setLayoutParams(params); + v.setVisibility(View.VISIBLE); + } + } + + /* + * Adjust visibility and size to make it appear as though an item is being + * dragged around and other items are making room for it: If dropping the + * item would result in it still being in the same place, then make the + * dragged listitem's size normal, but make the item invisible. Otherwise, + * if the dragged listitem is still on screen, make it as small as possible + * and expand the item below the insert point. If the dragged item is not on + * screen, only expand the item below the current insertpoint. + */ + private void doExpansion() { + int childnum = mDragPos - getFirstVisiblePosition(); + if (mDragPos > mFirstDragPos) { + childnum++; + } + + View first = getChildAt(mFirstDragPos - getFirstVisiblePosition()); + + for (int i = 0;; i++) { + View vv = getChildAt(i); + if (vv == null) { + break; + } + int height = mItemHeightNormal; + int visibility = View.VISIBLE; + if (vv.equals(first)) { + // processing the item that is being dragged + if (mDragPos == mFirstDragPos) { + // hovering over the original location + visibility = View.INVISIBLE; + } else { + // not hovering over it + height = 1; + } + } else if (i == childnum) { + if (mDragPos < getCount() - 1) { + height = mItemHeightExpanded; + } + } + ViewGroup.LayoutParams params = vv.getLayoutParams(); + params.height = height; + vv.setLayoutParams(params); + vv.setVisibility(visibility); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if ((mDragListener != null || mDropListener != null) && mDragView != null) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + Rect r = mTempRect; + mDragView.getDrawingRect(r); + stopDragging(); + if (mDropListener != null && mDragPos >= 0 && mDragPos < getCount()) { + mDropListener.drop(mFirstDragPos, mDragPos); + } + unExpandViews(false); + break; + + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_MOVE: + int x = (int) ev.getX(); + int y = (int) ev.getY(); + dragView(x, y); + int itemnum = getItemForPosition(y); + if (itemnum >= 0) { + if (action == MotionEvent.ACTION_DOWN || itemnum != mDragPos) { + if (mDragListener != null) { + mDragListener.drag(mDragPos, itemnum); + } + mDragPos = itemnum; + doExpansion(); + } + int speed = 0; + adjustScrollBounds(y); + if (y > mLowerBound) { + // scroll the list up a bit + speed = y > (mHeight + mLowerBound) / 2 ? 16 : 4; + } else if (y < mUpperBound) { + // scroll the list down a bit + speed = y < mUpperBound / 2 ? -16 : -4; + } + if (speed != 0) { + int ref = pointToPosition(0, mHeight / 2); + if (ref == AdapterView.INVALID_POSITION) { + // we hit a divider or an invisible view, check + // somewhere else + ref = pointToPosition(0, mHeight / 2 + getDividerHeight() + 64); + } + View v = getChildAt(ref - getFirstVisiblePosition()); + if (v != null) { + int pos = v.getTop(); + setSelectionFromTop(ref, pos - speed); + } + } + } + break; + } + return true; + } + return super.onTouchEvent(ev); + } + + private void startDragging(Bitmap bm, int y) { + stopDragging(); + + mWindowParams = new WindowManager.LayoutParams(); + mWindowParams.gravity = Gravity.TOP; + mWindowParams.x = 0; + mWindowParams.y = y - mDragPoint + mCoordOffset; + + mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; + mWindowParams.format = PixelFormat.TRANSLUCENT; + mWindowParams.windowAnimations = 0; + + Context context = getContext(); + ImageView v = new ImageView(context); + int backGroundColor = context.getResources().getColor(R.color.dragndrop_background); + v.setBackgroundColor(backGroundColor); + v.setImageBitmap(bm); + mDragBitmap = bm; + + mWindowManager = (WindowManager) context.getSystemService("window"); + mWindowManager.addView(v, mWindowParams); + mDragView = v; + } + + private void dragView(int x, int y) { + mWindowParams.y = y - mDragPoint + mCoordOffset; + mWindowManager.updateViewLayout(mDragView, mWindowParams); + } + + private void stopDragging() { + if (mDragView != null) { + WindowManager wm = (WindowManager) getContext().getSystemService("window"); + wm.removeView(mDragView); + mDragView.setImageDrawable(null); + mDragView = null; + } + if (mDragBitmap != null) { + mDragBitmap.recycle(); + mDragBitmap = null; + } + } + + public void setDragListener(DragListener l) { + mDragListener = l; + } + + public void setDropListener(DropListener l) { + mDropListener = l; + } + + public interface DragListener { + void drag(int from, int to); + } + + public interface DropListener { + void drop(int from, int to); + } +} diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index b0fb9151e..133d904f6 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -37,11 +37,17 @@ import android.preference.PreferenceGroup; import android.telephony.TelephonyManager; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TabWidget; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.net.InetAddress; import java.util.Iterator; import java.util.List; @@ -49,6 +55,8 @@ public class Utils { + private static final String TAG = "Utils"; + /** * Set the preference's title to the matching activity's label. */ @@ -449,4 +457,41 @@ public static int getTetheringLabel(ConnectivityManager cm) { return R.string.tether_settings_title_bluetooth; } } + + public static boolean fileExists(String filename) { + return new File(filename).exists(); + } + + public static String fileReadOneLine(String fname) { + BufferedReader br; + String line = null; + + try { + br = new BufferedReader(new FileReader(fname), 512); + try { + line = br.readLine(); + } finally { + br.close(); + } + } catch (Exception e) { + Log.e(TAG, "IO Exception when reading /sys/ file", e); + } + return line; + } + + public static boolean fileWriteOneLine(String fname, String value) { + try { + FileWriter fw = new FileWriter(fname); + try { + fw.write(value); + } finally { + fw.close(); + } + } catch (IOException e) { + String Error = "Error writing to " + fname + ". Exception: "; + Log.e(TAG, Error, e); + return false; + } + return true; + } } diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java index 728e558c5..cbb23900e 100644 --- a/src/com/android/settings/deviceinfo/Memory.java +++ b/src/com/android/settings/deviceinfo/Memory.java @@ -107,7 +107,7 @@ public void onCreate(Bundle icicle) { } // only show options menu if we are not using the legacy USB mass storage support - setHasOptionsMenu(!massStorageEnabled); + setHasOptionsMenu(true); //!massStorageEnabled); } @Override diff --git a/src/com/android/settings/deviceinfo/UsbSettings.java b/src/com/android/settings/deviceinfo/UsbSettings.java index af279e8ea..8660f960d 100644 --- a/src/com/android/settings/deviceinfo/UsbSettings.java +++ b/src/com/android/settings/deviceinfo/UsbSettings.java @@ -99,7 +99,7 @@ private void updateToggles(String function) { if (UsbManager.USB_FUNCTION_MTP.equals(function)) { mMtp.setChecked(true); mPtp.setChecked(false); - } else if (UsbManager.USB_FUNCTION_PTP.equals(function)) { + } else if (UsbManager.USB_FUNCTION_MASS_STORAGE.equals(function)) { mMtp.setChecked(false); mPtp.setChecked(true); } else { @@ -129,8 +129,8 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP, true); updateToggles(UsbManager.USB_FUNCTION_MTP); } else if (preference == mPtp) { - mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP, true); - updateToggles(UsbManager.USB_FUNCTION_PTP); + mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MASS_STORAGE, true); + updateToggles(UsbManager.USB_FUNCTION_MASS_STORAGE); } return true; }