SetupWizard: Initial commit
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
values-v1
|
30
Android.mk
Normal file
@ -0,0 +1,30 @@
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-java-files-under, src)
|
||||
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
|
||||
LOCAL_PACKAGE_NAME := CMSetupWizard
|
||||
LOCAL_CERTIFICATE := platform
|
||||
LOCAL_PRIVILEGED_MODULE := true
|
||||
|
||||
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
|
||||
|
||||
LOCAL_STATIC_JAVA_LIBRARIES := \
|
||||
android-support-v4 \
|
||||
android-support-v13 \
|
||||
play \
|
||||
libphonenumber
|
||||
|
||||
LOCAL_JAVA_LIBRARIES += org.cyanogenmod.hardware
|
||||
|
||||
# Include res dir from chips
|
||||
google_play_dir := ../../../external/google/google_play_services/libproject/google-play-services_lib/res
|
||||
res_dir := $(google_play_dir) res
|
||||
|
||||
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dir))
|
||||
LOCAL_AAPT_FLAGS := --auto-add-overlay
|
||||
LOCAL_AAPT_FLAGS += --extra-packages com.google.android.gms
|
||||
|
||||
include $(BUILD_PACKAGE)
|
69
AndroidManifest.xml
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.cyanogenmod.setupwizard"
|
||||
android:versionCode="3">
|
||||
|
||||
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
|
||||
<uses-permission android:name="android.permission.STATUS_BAR" />
|
||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
|
||||
<uses-permission android:name="android.permission.SET_TIME" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_THEME_MANAGER"/>
|
||||
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
|
||||
<uses-permission android:name="android.permission.HARDWARE_ABSTRACTION_ACCESS" />
|
||||
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
|
||||
|
||||
<application android:label="@string/app_name"
|
||||
android:icon="@drawable/icon"
|
||||
android:theme="@style/Theme.Setup"
|
||||
android:name=".SetupWizardApp">
|
||||
|
||||
<meta-data android:name="com.google.android.gms.version"
|
||||
android:value="@integer/google_play_services_version" />
|
||||
|
||||
<activity android:name=".ui.SetupWizardActivity"
|
||||
android:label="@string/product_name"
|
||||
android:launchMode="singleInstance"
|
||||
android:excludeFromRecents="true"
|
||||
android:immersive="true">
|
||||
|
||||
<intent-filter android:priority="9">
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
|
||||
|
||||
<category android:name="android.intent.category.HOME" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
3
proguard.flags
Normal file
@ -0,0 +1,3 @@
|
||||
-keep class * extends java.util.ListResourceBundle {
|
||||
protected Object[][] getContents();
|
||||
}
|
6
res/anim/fadein.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="1000"/>
|
||||
</set>
|
6
res/anim/fadeout.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"
|
||||
android:duration="1000"/>
|
||||
</set>
|
8
res/anim/slide_left.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set>
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromXDelta="-100%"
|
||||
android:toXDelta="0"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="500"/>
|
||||
</set>
|
8
res/anim/slide_right.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set>
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromXDelta="0"
|
||||
android:toXDelta="100%"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"
|
||||
android:duration="500"/>
|
||||
</set>
|
BIN
res/drawable-hdpi/brand.png
Executable file
After Width: | Height: | Size: 11 KiB |
BIN
res/drawable-hdpi/brand_finish.png
Executable file
After Width: | Height: | Size: 18 KiB |
BIN
res/drawable-hdpi/finish_logo.png
Executable file
After Width: | Height: | Size: 18 KiB |
BIN
res/drawable-hdpi/icon.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
res/drawable-hdpi/powered_by.png
Executable file
After Width: | Height: | Size: 4.1 KiB |
BIN
res/drawable-hdpi/sim_back.png
Executable file
After Width: | Height: | Size: 6.1 KiB |
BIN
res/drawable-hdpi/sim_side.png
Executable file
After Width: | Height: | Size: 5.7 KiB |
BIN
res/drawable-mdpi/brand.png
Executable file
After Width: | Height: | Size: 5.7 KiB |
BIN
res/drawable-mdpi/brand_finish.png
Executable file
After Width: | Height: | Size: 9.0 KiB |
BIN
res/drawable-mdpi/finish_logo.png
Executable file
After Width: | Height: | Size: 9.0 KiB |
BIN
res/drawable-mdpi/icon.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
res/drawable-mdpi/powered_by.png
Executable file
After Width: | Height: | Size: 2.4 KiB |
BIN
res/drawable-mdpi/sim_back.png
Executable file
After Width: | Height: | Size: 3.2 KiB |
BIN
res/drawable-mdpi/sim_side.png
Executable file
After Width: | Height: | Size: 3.1 KiB |
BIN
res/drawable-xhdpi/brand.png
Executable file
After Width: | Height: | Size: 13 KiB |
BIN
res/drawable-xhdpi/brand_finish.png
Executable file
After Width: | Height: | Size: 22 KiB |
BIN
res/drawable-xhdpi/finish_logo.png
Executable file
After Width: | Height: | Size: 22 KiB |
BIN
res/drawable-xhdpi/icon.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
res/drawable-xhdpi/powered_by.png
Executable file
After Width: | Height: | Size: 5.7 KiB |
BIN
res/drawable-xhdpi/sim_back.png
Executable file
After Width: | Height: | Size: 9.0 KiB |
BIN
res/drawable-xhdpi/sim_side.png
Executable file
After Width: | Height: | Size: 8.4 KiB |
BIN
res/drawable-xxhdpi/brand.png
Executable file
After Width: | Height: | Size: 22 KiB |
BIN
res/drawable-xxhdpi/brand_finish.png
Executable file
After Width: | Height: | Size: 39 KiB |
BIN
res/drawable-xxhdpi/finish_logo.png
Executable file
After Width: | Height: | Size: 39 KiB |
BIN
res/drawable-xxhdpi/powered_by.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
res/drawable-xxhdpi/sim_back.png
Executable file
After Width: | Height: | Size: 17 KiB |
BIN
res/drawable-xxhdpi/sim_side.png
Executable file
After Width: | Height: | Size: 16 KiB |
BIN
res/drawable-xxxhdpi/brand.png
Executable file
After Width: | Height: | Size: 32 KiB |
BIN
res/drawable-xxxhdpi/brand_finish.png
Executable file
After Width: | Height: | Size: 60 KiB |
BIN
res/drawable-xxxhdpi/finish_logo.png
Executable file
After Width: | Height: | Size: 60 KiB |
BIN
res/drawable-xxxhdpi/powered_by.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
res/drawable-xxxhdpi/sim_back.png
Executable file
After Width: | Height: | Size: 26 KiB |
BIN
res/drawable-xxxhdpi/sim_side.png
Executable file
After Width: | Height: | Size: 25 KiB |
20
res/drawable/divider.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<solid android:color="@color/divider" />
|
||||
<size android:width="316dp" android:height="1dp"/>
|
||||
</shape>
|
11
res/drawable/ic_chevron_left_dark.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:fillColor="@color/primary_text"
|
||||
android:pathData="M15.41,7.41L14,6l-6,6l6,6l1.41-1.41L10.83,12L15.41,7.41Z" />
|
||||
</vector>
|
11
res/drawable/ic_chevron_left_wht.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:fillColor="@color/white"
|
||||
android:pathData="M15.41,7.41L14,6l-6,6l6,6l1.41-1.41L10.83,12L15.41,7.41Z" />
|
||||
</vector>
|
11
res/drawable/ic_chevron_right_dark.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:fillColor="@color/primary_text"
|
||||
android:pathData="M10,6L8.59,7.41L13.17,12l-4.58,4.59L10,18l6-6L10,6Z" />
|
||||
</vector>
|
11
res/drawable/ic_chevron_right_wht.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:fillColor="@color/white"
|
||||
android:pathData="M10,6L8.59,7.41L13.17,12l-4.58,4.59L10,18l6-6L10,6Z" />
|
||||
</vector>
|
25
res/drawable/ic_signal_0.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
|
||||
</vector>
|
28
res/drawable/ic_signal_1.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
|
||||
<path
|
||||
android:fillColor="@color/accent"
|
||||
android:pathData="M11.300000,12.700000l-9.300000,9.300000 9.300000,0.000000z"/>
|
||||
</vector>
|
28
res/drawable/ic_signal_2.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
|
||||
<path
|
||||
android:fillColor="@color/accent"
|
||||
android:pathData="M14.000000,10.000000l-12.000000,12.000000 12.000000,0.000000z"/>
|
||||
</vector>
|
28
res/drawable/ic_signal_3.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
|
||||
<path
|
||||
android:fillColor="@color/accent"
|
||||
android:pathData="M16.700001,7.300000l-14.700001,14.700000 14.700001,0.000000z"/>
|
||||
</vector>
|
25
res/drawable/ic_signal_4.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/accent"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
|
||||
</vector>
|
25
res/drawable/ic_signal_no_signal.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
Copyright (C) 2014 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:autoMirrored="true"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2.000000,22.000000l20.000000,0.000000L22.000000,2.000000L2.000000,22.000000zM20.000000,20.000000L6.800000,20.000000L20.000000,6.800000L20.000000,20.000000z"/>
|
||||
</vector>
|
37
res/layout/button_bar.xml
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/button_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
style="@style/ButtonBar.Left"
|
||||
android:id="@+id/prev_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/prev" />
|
||||
|
||||
<Button
|
||||
style="@style/ButtonBar.Right"
|
||||
android:id="@+id/next_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/next" />
|
||||
|
||||
</LinearLayout>
|
44
res/layout/choose_data_sim_page.xml
Normal file
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/page_view"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/PageSummaryText"
|
||||
android:textSize="15sp"
|
||||
android:paddingTop="@dimen/content_margin_top"
|
||||
android:paddingLeft="@dimen/content_margin_left"
|
||||
android:paddingRight="@dimen/content_margin_right"
|
||||
android:paddingBottom="@dimen/summary_margin_bottom"
|
||||
android:text="@string/choose_data_sim_summary" />
|
||||
|
||||
<include layout="@layout/divider" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
|
51
res/layout/data_sim_row.xml
Normal file
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/sim_row"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/content_margin_left"
|
||||
android:paddingRight="@dimen/data_switch_margin_right"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/signal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_signal_0" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sim_title"
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginLeft="@dimen/carrier_text_margin_left"
|
||||
android:maxLines="4" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/enable_check"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:duplicateParentState="true"
|
||||
android:clickable="false"/>
|
||||
|
||||
</LinearLayout>
|
41
res/layout/date_time_setup_custom_list_item_2.xml
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<!-- Based on simple_list_item_2.xml in framework -->
|
||||
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:mode="twoLine"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="16dip"
|
||||
style="@style/SpinnerItem" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="10dip"
|
||||
android:layout_below="@android:id/text1"
|
||||
android:layout_alignStart="@android:id/text1"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
style="@style/SpinnerItem" />
|
||||
</TwoLineListItem>
|
21
res/layout/divider.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/divider" />
|
26
res/layout/header.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/header_height">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height"
|
||||
style="@style/PageTitle" />
|
||||
|
||||
</RelativeLayout>
|
26
res/layout/header_condensed.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height"
|
||||
style="@style/PageTitle" />
|
||||
|
||||
</RelativeLayout>
|
42
res/layout/locale_picker.xml
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
**
|
||||
** Copyright 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.
|
||||
*/
|
||||
-->
|
||||
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<ImageButton android:id="@+id/increment"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="22dip"
|
||||
android:paddingBottom="22dip"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/numberpicker_input"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMediumInverse"
|
||||
android:gravity="center"
|
||||
android:singleLine="true" />
|
||||
|
||||
<ImageButton android:id="@+id/decrement"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="22dip"
|
||||
android:paddingBottom="22dip"/>
|
||||
|
||||
</merge>
|
33
res/layout/locale_picker_item.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:gravity="left"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="6dp"
|
||||
android:paddingBottom="6dp"
|
||||
android:paddingEnd="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/locale"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="left"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
</LinearLayout>
|
140
res/layout/location_settings.xml
Normal file
@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
style="@style/PageContent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="15sp"
|
||||
android:layout_marginBottom="@dimen/summary_margin_bottom"
|
||||
style="@style/PageSummaryText"
|
||||
android:text="@string/location_services_summary" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/location"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/location_margin_left"
|
||||
android:layout_marginRight="@dimen/content_margin_right"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true">
|
||||
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/location_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top"
|
||||
android:layout_marginTop="5dp"
|
||||
android:duplicateParentState="true"
|
||||
android:clickable="false" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/location_summary"
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textSize="15sp"
|
||||
android:gravity="top"
|
||||
android:layout_marginLeft="@dimen/location_text_margin_left"
|
||||
android:layout_marginRight="@dimen/location_text_margin_right"
|
||||
android:paddingBottom="@dimen/content_margin_bottom"
|
||||
android:text="@string/location_access_summary"
|
||||
android:maxLines="5" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/gps"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/location_margin_left"
|
||||
android:layout_marginRight="@dimen/content_margin_right"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/gps_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top"
|
||||
android:layout_marginTop="5dp"
|
||||
android:duplicateParentState="true"
|
||||
android:clickable="false" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/gps_summary"
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textSize="15sp"
|
||||
android:gravity="top"
|
||||
android:layout_marginLeft="@dimen/location_text_margin_left"
|
||||
android:layout_marginRight="@dimen/location_text_margin_right"
|
||||
android:paddingBottom="@dimen/content_margin_bottom"
|
||||
android:text="@string/location_gps"
|
||||
android:maxLines="5" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/network"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/location_margin_left"
|
||||
android:layout_marginRight="@dimen/content_margin_right"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/network_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top"
|
||||
android:layout_marginTop="5dp"
|
||||
android:duplicateParentState="true"
|
||||
android:clickable="false" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/network_summary"
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textSize="15sp"
|
||||
android:gravity="top"
|
||||
android:layout_marginLeft="@dimen/location_text_margin_left"
|
||||
android:layout_marginRight="@dimen/location_text_margin_right"
|
||||
android:paddingBottom="@dimen/content_margin_bottom"
|
||||
android:text="@string/location_network"
|
||||
android:maxLines="5" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
45
res/layout/logo_header.xml
Normal file
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/logo_header_height">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/brand_logo"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/brand"
|
||||
android:paddingLeft="@dimen/header_logo_margin_left"
|
||||
android:paddingBottom="@dimen/header_logo_margin_bottom"
|
||||
android:layout_above="@+id/powered_by_logo"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/powered_by_logo"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/powered_by"
|
||||
android:visibility="gone"
|
||||
android:paddingLeft="@dimen/header_logo_margin_left"
|
||||
android:paddingBottom="@dimen/header_logo_margin_bottom"
|
||||
android:layout_above="@android:id/title"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height"
|
||||
style="@style/PageTitle" />
|
||||
|
||||
</RelativeLayout>
|
83
res/layout/mobile_data_settings.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/mobile_data_summary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/PageSummaryText"
|
||||
android:textSize="15sp"
|
||||
android:paddingTop="@dimen/content_margin_top"
|
||||
android:paddingLeft="@dimen/content_margin_left"
|
||||
android:paddingRight="@dimen/content_margin_right"
|
||||
android:paddingBottom="@dimen/summary_margin_bottom"
|
||||
android:text="@string/enable_mobile_data_summary" />
|
||||
|
||||
<include layout="@layout/divider" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/data"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/content_margin_left"
|
||||
android:paddingRight="@dimen/data_switch_margin_right"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/signal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_signal_0" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/enable_data_title"
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginLeft="@dimen/carrier_text_margin_left"
|
||||
android:text="@string/setup_mobile_data_no_service"
|
||||
android:maxLines="4" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/data_switch"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:duplicateParentState="true"
|
||||
android:clickable="false"
|
||||
android:textOff="@string/enable_mobile_off"
|
||||
android:textOn="@string/enable_mobile_on"/>
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/divider" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
98
res/layout/setup_datetime_page.xml
Normal file
@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/PageContent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/PageSummaryText"
|
||||
android:textSize="16sp"
|
||||
android:layout_marginBottom="@dimen/summary_margin_bottom"
|
||||
android:paddingRight="@dimen/location_text_margin_right"
|
||||
android:text="@string/date_time_summary" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/timezone_list"
|
||||
android:layout_width="290dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:saveEnabled="false"/>
|
||||
|
||||
<TwoLineListItem
|
||||
android:id="@+id/date_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:mode="twoLine"
|
||||
android:clickable="true"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/date_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/setup_current_date"
|
||||
style="@style/SpinnerItem" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/date_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/date_title"
|
||||
android:layout_alignStart="@id/date_title"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
style="@style/SpinnerItem" />
|
||||
</TwoLineListItem>
|
||||
|
||||
<TwoLineListItem
|
||||
android:id="@+id/time_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:mode="twoLine"
|
||||
android:clickable="true"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/setup_current_time"
|
||||
style="@style/SpinnerItem" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/time_title"
|
||||
android:layout_alignStart="@id/time_title"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
style="@style/SpinnerItem" />
|
||||
</TwoLineListItem>
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
13
res/layout/setup_finalizing.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ProgressBar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:indeterminate="true"
|
||||
style="@android:style/Widget.Material.ProgressBar.Horizontal" />
|
||||
|
||||
</LinearLayout>
|
32
res/layout/setup_finished_page.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/primary">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/brand_logo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@drawable/finish_logo"
|
||||
android:scaleType="centerInside"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
47
res/layout/setup_main.xml
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/root"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
style="@style/RootView">
|
||||
|
||||
<LinearLayout android:id="@+id/page"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
style="@style/PageContainer" >
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Header"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/button_bar" />
|
||||
|
||||
</LinearLayout>
|
32
res/layout/setup_welcome_page.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
style="@style/PageContent">
|
||||
|
||||
<com.cyanogenmod.account.ui.LocalePicker
|
||||
android:id="@+id/locale_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="12dp"
|
||||
android:gravity="left"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"/>
|
||||
|
||||
</FrameLayout>
|
49
res/layout/sim_missing_page.xml
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/sim_missing"
|
||||
style="@style/PageSummaryText"
|
||||
android:textSize="15sp"
|
||||
android:layout_marginBottom="@dimen/summary_margin_bottom"
|
||||
android:paddingTop="@dimen/content_margin_top"
|
||||
android:paddingLeft="@dimen/content_margin_left"
|
||||
android:paddingRight="@dimen/content_margin_right"
|
||||
android:text="@string/sim_missing_summary" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="right"
|
||||
android:src="@drawable/sim_back"/>
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
|
||||
|
17
res/transition/explode.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<explode/>
|
25
res/transition/slide_left.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:transitionOrdering="sequential">
|
||||
<changeBounds/>
|
||||
<slide android:slideEdge="left" >
|
||||
<targets>
|
||||
<target android:targetId="@id/page" />
|
||||
</targets>
|
||||
</slide>
|
||||
</transitionSet>
|
25
res/transition/slide_right.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:transitionOrdering="sequential">
|
||||
<changeBounds/>
|
||||
<slide android:slideEdge="right" >
|
||||
<targets>
|
||||
<target android:targetId="@id/page" />
|
||||
</targets>
|
||||
</slide>
|
||||
</transitionSet>
|
27
res/values-af/strings.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="next">Volgende</string>
|
||||
<string name="continue_label">Gaan voort</string>
|
||||
<string name="prev">Vorige</string>
|
||||
<string name="skip">Slaan oor</string>
|
||||
<string name="cancel">Kanselleer</string>
|
||||
<string name="ok">OK</string>
|
||||
|
||||
<string name="setup_welcome">Welkom by Cyanogen</string>
|
||||
</resources>
|
27
res/values-ar/strings.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="next">القادم</string>
|
||||
<string name="continue_label">متابعة</string>
|
||||
<string name="prev">سابق</string>
|
||||
<string name="skip">تخطي</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="ok">موافق</string>
|
||||
<string name="setup_complete">اكتمال الإعداد</string>
|
||||
<string name="setup_welcome">مرحبا بك في Cyanogen</string>
|
||||
</resources>
|
27
res/values-ca/strings.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="next">Següent</string>
|
||||
<string name="continue_label">Continua</string>
|
||||
<string name="prev">Anterior</string>
|
||||
<string name="skip">Omet</string>
|
||||
<string name="cancel">Cancel·la</string>
|
||||
<string name="ok">D\'acord</string>
|
||||
<string name="setup_complete">Configuració completa</string>
|
||||
<string name="setup_welcome">Benvingut a Cyanogen</string>
|
||||
</resources>
|
27
res/values-cs/strings.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="next">Další</string>
|
||||
<string name="continue_label">Pokračovat</string>
|
||||
<string name="prev">Předchozí</string>
|
||||
<string name="skip">Přeskočit</string>
|
||||
<string name="cancel">Zrušit</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="setup_complete">Nastavení dokončeno</string>
|
||||
<string name="setup_welcome">Vítá Vás Cyanogen</string>
|
||||
</resources>
|
27
res/values-es/strings.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="next">Siguiente</string>
|
||||
<string name="continue_label">Continuar</string>
|
||||
<string name="prev">Anterior</string>
|
||||
<string name="skip">Omitir</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="setup_complete">Configuración completada</string>
|
||||
<string name="setup_welcome">Bienvenido a Cyanogen</string>
|
||||
</resources>
|
19
res/values-land/dimens.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<resources>
|
||||
|
||||
</resources>
|
29
res/values/colors.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<resources>
|
||||
<color name="black">#000000</color>
|
||||
<color name="white">#ffffff</color>
|
||||
<color name="window_background">#e4e7e8</color>
|
||||
<color name="page_background">#efefef</color>
|
||||
|
||||
<color name="primary">#2196f3</color>
|
||||
<color name="primary_dark">#1481d8</color>
|
||||
<color name="accent">#009789</color>
|
||||
<color name="primary_text">#8a000000</color>
|
||||
<color name="secondary_text">#727272</color>
|
||||
<color name="divider">#40000000</color>
|
||||
</resources>
|
19
res/values/config.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<resources>
|
||||
<integer name="local_picker_items">3</integer>
|
||||
</resources>
|
34
res/values/dimens.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<resources>
|
||||
<dimen name="logo_header_height">290dp</dimen>
|
||||
<dimen name="header_height">220dp</dimen>
|
||||
<dimen name="page_title_height">56dp</dimen>
|
||||
<dimen name="header_title_margin_left">26dp</dimen>
|
||||
<dimen name="header_logo_margin_left">25dp</dimen>
|
||||
<dimen name="header_logo_margin_bottom">11dp</dimen>
|
||||
<dimen name="content_margin_top">26dp</dimen>
|
||||
<dimen name="content_margin_left">26dp</dimen>
|
||||
<dimen name="content_margin_right">14dp</dimen>
|
||||
<dimen name="content_margin_bottom">20dp</dimen>
|
||||
<dimen name="summary_margin_bottom">20dp</dimen>
|
||||
<dimen name="location_margin_left">20dp</dimen>
|
||||
<dimen name="location_text_margin_left">10dp</dimen>
|
||||
<dimen name="location_text_margin_right">30dp</dimen>
|
||||
<dimen name="data_switch_margin_right">30dp</dimen>
|
||||
<dimen name="carrier_text_margin_left">15dp</dimen>
|
||||
</resources>
|
72
res/values/strings.xml
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013-2014 The Cyanogen 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="app_name">Setup Wizard</string>
|
||||
<string name="product_name" translatable="false">cyanogen</string>
|
||||
<string name="account_name" translatable="false">Cyanogen</string>
|
||||
|
||||
<string name="next">Next</string>
|
||||
<string name="continue_label">Continue</string>
|
||||
<string name="skip">Skip</string>
|
||||
<string name="finish">Finish</string>
|
||||
<string name="start">Start</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="create">Create</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="existing">Existing</string>
|
||||
<string name="new_account">New</string>
|
||||
<string name="skip_anyway">Skip anyway</string>
|
||||
<string name="dont_skip">Don\'t skip</string>
|
||||
|
||||
<string name="setup_complete">Setup is complete</string>
|
||||
<string name="setup_welcome">Welcome</string>
|
||||
<string name="setup_wifi">Connect to Wi-Fi</string>
|
||||
<string name="setup_sim_missing">SIM Card Missing</string>
|
||||
<string name="setup_gms_account">GMS account</string>
|
||||
<string name="setup_choose_data_sim">Choose a SIM for Data</string>
|
||||
<string name="setup_location">Location Services</string>
|
||||
<string name="setup_datetime">Date & time</string>
|
||||
<string name="setup_current_date">Current date</string>
|
||||
<string name="setup_current_time">Current time</string>
|
||||
<string name="setup_msg_no_network">WARNING: You won\'t be able to set up your accounts</string>
|
||||
<string name="setup_warning_skip_wifi" product="tablet">WARNING: You may incur extra carrier data charges.\n\nTablet setup can require significant network activity.</string>
|
||||
<string name="setup_warning_skip_wifi" product="default">WARNING: You may incur extra carrier data charges.\n\nPhone setup can require significant network activity.</string>
|
||||
<string name="setup_privacy">Privacy Settings</string>
|
||||
<string name="setup_finalizing">Finalizing setup\u2026</string>
|
||||
|
||||
<string name="sim_missing_summary">A SIM card has not been detected in your device. Please insert a valid SIM card.</string>
|
||||
<string name="choose_data_sim_summary">Which SIM do you want to use for data? The selected SIM may incur network charges as it will be used to set up your device.</string>
|
||||
|
||||
<string name="date_time_summary">Set your time zone and adjust current date and time if needed</string>
|
||||
|
||||
<string name="location_services_summary">Location services allows Maps and other apps to gather and use data such as your approximate location. For example, Maps may use your approximate location to locate nearby coffee shops.</string>
|
||||
<string name="location_access_summary">Allow apps that have asked your permission to use your location information. This may include your current location and past locations.</string>
|
||||
<string name="location_gps">Improve location accuracy by allowing apps to use the GPS on your phone.</string>
|
||||
<string name="location_network">Use Google’s location service to help apps determine your location. This means sending annonymous location data to Google, even when no apps are running.</string>
|
||||
|
||||
<string name="setup_mobile_data">Turn On Mobile Data</string>
|
||||
<string name="setup_mobile_data_no_service">No service</string>
|
||||
<string name="setup_mobile_data_emergency_only">Emergency calls only</string>
|
||||
<string name="enable_mobile_data_summary">Do you want to use mobile data during setup? Turning on mobile data may be subject to data charges.</string>
|
||||
<string name="enable_mobile_off">No</string>
|
||||
<string name="enable_mobile_on">Yes</string>
|
||||
|
||||
<string name="data_sim_name">SIM <xliff:g id="sub">%d</xliff:g> - <xliff:g id="name">%s</xliff:g></string>
|
||||
|
||||
<string name="emergency_call">Emergency Call</string>
|
||||
</resources>
|
89
res/values/styles.xml
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<resources>
|
||||
<style name="Theme.Setup" parent="@android:style/Theme.Material.Light">
|
||||
<item name="android:windowActionBar">false</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowActivityTransitions">true</item>
|
||||
<item name="android:windowContentTransitions">true</item>
|
||||
<item name="android:colorPrimary">@color/primary</item>
|
||||
<item name="android:colorPrimaryDark">@color/primary</item>
|
||||
<item name="android:colorAccent">@color/accent</item>
|
||||
</style>
|
||||
|
||||
<style name="RootView">
|
||||
<item name="android:background">@color/window_background</item>
|
||||
</style>
|
||||
|
||||
<style name="Header">
|
||||
<item name="android:elevation">4dp</item>
|
||||
<item name="android:background">@color/primary</item>
|
||||
</style>
|
||||
|
||||
<style name="PageContainer">
|
||||
<item name="android:textColor">@color/primary_text</item>
|
||||
<item name="android:background">@color/page_background</item>
|
||||
</style>
|
||||
|
||||
<style name="PageContent">
|
||||
<item name="android:paddingTop">@dimen/content_margin_top</item>
|
||||
<item name="android:paddingLeft">@dimen/content_margin_left</item>
|
||||
<item name="android:paddingRight">@dimen/content_margin_right</item>
|
||||
</style>
|
||||
|
||||
<style name="PageTitle">
|
||||
<item name="android:id">@android:id/title</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
<item name="android:background">@color/primary_dark</item>
|
||||
<item name="android:layout_alignParentBottom">true</item>
|
||||
<item name="android:gravity">left|center_vertical</item>
|
||||
<item name="android:paddingLeft">@dimen/header_title_margin_left</item>
|
||||
</style>
|
||||
|
||||
<style name="PageSummaryText">
|
||||
<item name="android:id">@android:id/summary</item>
|
||||
</style>
|
||||
|
||||
<style name="SpinnerItem">
|
||||
<item name="android:textSize">15sp</item>
|
||||
</style>
|
||||
|
||||
<style name="ButtonBar" parent="@android:style/Widget.Material.ActionButton">
|
||||
<item name="android:layout_height">48dp</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
<item name="android:textAllCaps">true</item>
|
||||
<item name="android:maxLines">1</item>
|
||||
<item name="android:minWidth">15dp</item>
|
||||
<item name="android:minHeight">15dp</item>
|
||||
<item name="android:textColor">@color/primary_text</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:drawablePadding">5dp</item>
|
||||
</style>
|
||||
|
||||
<style name="ButtonBar.Left">
|
||||
<item name="android:paddingStart">15dp</item>
|
||||
<item name="android:gravity">center_vertical|start</item>
|
||||
<item name="android:drawableLeft">@drawable/ic_chevron_left_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="ButtonBar.Right">
|
||||
<item name="android:paddingEnd">15dp</item>
|
||||
<item name="android:gravity">center_vertical|end</item>
|
||||
<item name="android:drawableRight">@drawable/ic_chevron_right_dark</item>
|
||||
</style>
|
||||
</resources>
|
4
res/values/version.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="google_play_services_version">4323000</integer>
|
||||
</resources>
|
103
res/xml/timezones.xml
Normal file
@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 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.
|
||||
-->
|
||||
<timezones>
|
||||
<timezone id="Pacific/Majuro">Marshall Islands</timezone>
|
||||
<timezone id="Pacific/Midway">Midway Island</timezone>
|
||||
<timezone id="Pacific/Honolulu">Hawaii</timezone>
|
||||
<timezone id="America/Anchorage">Alaska</timezone>
|
||||
<timezone id="America/Los_Angeles">Pacific Time</timezone>
|
||||
<timezone id="America/Tijuana">Tijuana</timezone>
|
||||
<timezone id="America/Phoenix">Arizona</timezone>
|
||||
<timezone id="America/Chihuahua">Chihuahua</timezone>
|
||||
<timezone id="America/Denver">Mountain Time</timezone>
|
||||
<timezone id="America/Costa_Rica">Central America</timezone>
|
||||
<timezone id="America/Chicago">Central Time</timezone>
|
||||
<timezone id="America/Mexico_City">Mexico City</timezone>
|
||||
<timezone id="America/Regina">Saskatchewan</timezone>
|
||||
<timezone id="America/Bogota">Bogota</timezone>
|
||||
<timezone id="America/New_York">Eastern Time</timezone>
|
||||
<timezone id="America/Caracas">Venezuela</timezone>
|
||||
<timezone id="America/Barbados">Atlantic Time (Barbados)</timezone>
|
||||
<timezone id="America/Halifax">Atlantic Time (Canada)</timezone>
|
||||
<timezone id="America/Manaus">Manaus</timezone>
|
||||
<timezone id="America/Santiago">Santiago</timezone>
|
||||
<timezone id="America/St_Johns">Newfoundland</timezone>
|
||||
<timezone id="America/Sao_Paulo">Brasilia</timezone>
|
||||
<timezone id="America/Argentina/Buenos_Aires">Buenos Aires</timezone>
|
||||
<timezone id="America/Godthab">Greenland</timezone>
|
||||
<timezone id="America/Montevideo">Montevideo</timezone>
|
||||
<timezone id="Atlantic/South_Georgia">Mid-Atlantic</timezone>
|
||||
<timezone id="Atlantic/Azores">Azores</timezone>
|
||||
<timezone id="Atlantic/Cape_Verde">Cape Verde Islands</timezone>
|
||||
<timezone id="Africa/Casablanca">Casablanca</timezone>
|
||||
<timezone id="Europe/London">London, Dublin</timezone>
|
||||
<timezone id="Europe/Amsterdam">Amsterdam, Berlin</timezone>
|
||||
<timezone id="Europe/Belgrade">Belgrade</timezone>
|
||||
<timezone id="Europe/Brussels">Brussels</timezone>
|
||||
<timezone id="Europe/Sarajevo">Sarajevo</timezone>
|
||||
<timezone id="Africa/Windhoek">Windhoek</timezone>
|
||||
<timezone id="Africa/Brazzaville">W. Africa Time</timezone>
|
||||
<timezone id="Asia/Amman">Amman, Jordan</timezone>
|
||||
<timezone id="Europe/Athens">Athens, Istanbul</timezone>
|
||||
<timezone id="Asia/Beirut">Beirut, Lebanon</timezone>
|
||||
<timezone id="Africa/Cairo">Cairo</timezone>
|
||||
<timezone id="Europe/Helsinki">Helsinki</timezone>
|
||||
<timezone id="Asia/Jerusalem">Jerusalem</timezone>
|
||||
<timezone id="Europe/Minsk">Minsk</timezone>
|
||||
<timezone id="Africa/Harare">Harare</timezone>
|
||||
<timezone id="Asia/Baghdad">Baghdad</timezone>
|
||||
<timezone id="Europe/Moscow">Moscow</timezone>
|
||||
<timezone id="Asia/Kuwait">Kuwait</timezone>
|
||||
<timezone id="Africa/Nairobi">Nairobi</timezone>
|
||||
<timezone id="Asia/Tehran">Tehran</timezone>
|
||||
<timezone id="Asia/Baku">Baku</timezone>
|
||||
<timezone id="Asia/Tbilisi">Tbilisi</timezone>
|
||||
<timezone id="Asia/Yerevan">Yerevan</timezone>
|
||||
<timezone id="Asia/Dubai">Dubai</timezone>
|
||||
<timezone id="Asia/Kabul">Kabul</timezone>
|
||||
<timezone id="Asia/Karachi">Islamabad, Karachi</timezone>
|
||||
<timezone id="Asia/Oral">Ural'sk</timezone>
|
||||
<timezone id="Asia/Yekaterinburg">Yekaterinburg</timezone>
|
||||
<timezone id="Asia/Calcutta">Kolkata</timezone>
|
||||
<timezone id="Asia/Colombo">Sri Lanka</timezone>
|
||||
<timezone id="Asia/Katmandu">Kathmandu</timezone>
|
||||
<timezone id="Asia/Almaty">Astana</timezone>
|
||||
<timezone id="Asia/Rangoon">Yangon</timezone>
|
||||
<timezone id="Asia/Krasnoyarsk">Krasnoyarsk</timezone>
|
||||
<timezone id="Asia/Bangkok">Bangkok</timezone>
|
||||
<timezone id="Asia/Jakarta">Jakarta</timezone>
|
||||
<timezone id="Asia/Shanghai">Beijing</timezone>
|
||||
<timezone id="Asia/Hong_Kong">Hong Kong</timezone>
|
||||
<timezone id="Asia/Irkutsk">Irkutsk</timezone>
|
||||
<timezone id="Asia/Kuala_Lumpur">Kuala Lumpur</timezone>
|
||||
<timezone id="Australia/Perth">Perth</timezone>
|
||||
<timezone id="Asia/Taipei">Taipei</timezone>
|
||||
<timezone id="Asia/Seoul">Seoul</timezone>
|
||||
<timezone id="Asia/Tokyo">Tokyo, Osaka</timezone>
|
||||
<timezone id="Asia/Yakutsk">Yakutsk</timezone>
|
||||
<timezone id="Australia/Adelaide">Adelaide</timezone>
|
||||
<timezone id="Australia/Darwin">Darwin</timezone>
|
||||
<timezone id="Australia/Brisbane">Brisbane</timezone>
|
||||
<timezone id="Australia/Hobart">Hobart</timezone>
|
||||
<timezone id="Australia/Sydney">Sydney, Canberra</timezone>
|
||||
<timezone id="Asia/Vladivostok">Vladivostok</timezone>
|
||||
<timezone id="Pacific/Guam">Guam</timezone>
|
||||
<timezone id="Asia/Magadan">Magadan</timezone>
|
||||
<timezone id="Pacific/Auckland">Auckland</timezone>
|
||||
<timezone id="Pacific/Fiji">Fiji</timezone>
|
||||
<timezone id="Pacific/Tongatapu">Tonga</timezone>
|
||||
</timezones>
|
58
src/com/cyanogenmod/setupwizard/SetupWizardApp.java
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard;
|
||||
|
||||
|
||||
import android.app.Application;
|
||||
import android.app.StatusBarManager;
|
||||
import android.content.Context;
|
||||
|
||||
public class SetupWizardApp extends Application {
|
||||
|
||||
public static final String TAG = SetupWizardApp.class.getSimpleName();
|
||||
// Leave this off for release
|
||||
public static final boolean DEBUG = false;
|
||||
|
||||
public static final String ACCOUNT_TYPE_CYANOGEN = "com.cyanogen";
|
||||
public static final String ACCOUNT_TYPE_GMS = "com.google";
|
||||
|
||||
public static final String ACTION_SETUP_WIFI = "com.android.net.wifi.SETUP_WIFI_NETWORK";
|
||||
|
||||
public static final String EXTRA_FIRST_RUN = "firstRun";
|
||||
public static final String EXTRA_ALLOW_SKIP = "allowSkip";
|
||||
public static final String EXTRA_AUTO_FINISH = "wifi_auto_finish_on_connect";
|
||||
|
||||
public static final int REQUEST_CODE_SETUP_WIFI = 0;
|
||||
|
||||
private StatusBarManager mStatusBarManager;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
mStatusBarManager = (StatusBarManager)getSystemService(Context.STATUS_BAR_SERVICE);
|
||||
}
|
||||
|
||||
public void disableStatusBar() {
|
||||
mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
|
||||
| StatusBarManager.DISABLE_NOTIFICATION_TICKER | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME
|
||||
| StatusBarManager.DISABLE_SEARCH);
|
||||
}
|
||||
|
||||
public void enableStatusBar() {
|
||||
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
|
||||
}
|
||||
}
|
155
src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class AbstractSetupData implements SetupDataCallbacks {
|
||||
|
||||
private static final String TAG = AbstractSetupData.class.getSimpleName();
|
||||
|
||||
protected Context mContext;
|
||||
private ArrayList<SetupDataCallbacks> mListeners = new ArrayList<SetupDataCallbacks>();
|
||||
private PageList mPageList;
|
||||
|
||||
private int mCurrentPageIndex = 0;
|
||||
|
||||
public AbstractSetupData(Context context) {
|
||||
mContext = context;
|
||||
mPageList = onNewPageList();
|
||||
}
|
||||
|
||||
protected abstract PageList onNewPageList();
|
||||
|
||||
@Override
|
||||
public void onPageLoaded(Page page) {
|
||||
for (int i = 0; i < mListeners.size(); i++) {
|
||||
mListeners.get(i).onPageLoaded(page);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageTreeChanged() {
|
||||
for (int i = 0; i < mListeners.size(); i++) {
|
||||
mListeners.get(i).onPageTreeChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
for (int i = 0; i < mListeners.size(); i++) {
|
||||
mListeners.get(i).onFinish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page getPage(String key) {
|
||||
return mPageList.getPage(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page getPage(int index) {
|
||||
return mPageList.getPage(index);
|
||||
}
|
||||
|
||||
public Page getCurrentPage() {
|
||||
return mPageList.getPage(mCurrentPageIndex);
|
||||
}
|
||||
|
||||
public boolean isFirstPage() {
|
||||
return mCurrentPageIndex == 0;
|
||||
}
|
||||
|
||||
public boolean isLastPage() {
|
||||
return mCurrentPageIndex == mPageList.size() - 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNextPage() {
|
||||
if (getCurrentPage().doNextAction() == false) {
|
||||
if (advanceToNextUncompleted()) {
|
||||
for (int i = 0; i < mListeners.size(); i++) {
|
||||
mListeners.get(i).onNextPage();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreviousPage() {
|
||||
if (getCurrentPage().doPreviousAction() == false) {
|
||||
if (advanceToPreviousUncompleted()) {
|
||||
for (int i = 0; i < mListeners.size(); i++) {
|
||||
mListeners.get(i).onPreviousPage();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageViewCreated(LayoutInflater inflater, Bundle savedInstanceState,
|
||||
int layoutResource) {}
|
||||
|
||||
private boolean advanceToNextUncompleted() {
|
||||
while (mCurrentPageIndex < mPageList.size()) {
|
||||
mCurrentPageIndex++;
|
||||
if (!getCurrentPage().isCompleted()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean advanceToPreviousUncompleted() {
|
||||
while (mCurrentPageIndex > 0) {
|
||||
mCurrentPageIndex--;
|
||||
if (!getCurrentPage().isCompleted()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void load(Bundle savedValues) {
|
||||
for (String key : savedValues.keySet()) {
|
||||
Page page = mPageList.getPage(key);
|
||||
if (page != null) {
|
||||
page.resetData(savedValues.getBundle(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Bundle save() {
|
||||
Bundle bundle = new Bundle();
|
||||
for (Page page : mPageList.values()) {
|
||||
bundle.putBundle(page.getKey(), page.getData());
|
||||
}
|
||||
return bundle;
|
||||
}
|
||||
|
||||
public void registerListener(SetupDataCallbacks listener) {
|
||||
mListeners.add(listener);
|
||||
}
|
||||
|
||||
public void unregisterListener(SetupDataCallbacks listener) {
|
||||
mListeners.remove(listener);
|
||||
}
|
||||
}
|
59
src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import com.cyanogenmod.setupwizard.util.SetupWizardUtils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.telephony.SubscriptionManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CMSetupWizardData extends AbstractSetupData {
|
||||
|
||||
public CMSetupWizardData(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PageList onNewPageList() {
|
||||
ArrayList<SetupPage> pages = new ArrayList<SetupPage>();
|
||||
pages.add(new WelcomePage(mContext, this));
|
||||
pages.add(new WifiSetupPage(mContext, this));
|
||||
if (SetupWizardUtils.isGSMPhone(mContext) && SetupWizardUtils.isSimMissing(mContext)) {
|
||||
pages.add(new SimCardMissingPage(mContext, this));
|
||||
}
|
||||
if (SetupWizardUtils.isMultiSimDevice(mContext)
|
||||
&& SubscriptionManager.getActiveSubInfoCount() > 1) {
|
||||
pages.add(new ChooseDataSimPage(mContext, this));
|
||||
}
|
||||
if (SetupWizardUtils.hasTelephony(mContext) &&
|
||||
!SetupWizardUtils.isMobileDataEnabled(mContext)) {
|
||||
pages.add(new MobileDataPage(mContext, this));
|
||||
}
|
||||
if (SetupWizardUtils.hasGMS(mContext)) {
|
||||
pages.add(new GmsAccountPage(mContext, this));
|
||||
}
|
||||
pages.add(new CyanogenAccountPage(mContext, this));
|
||||
pages.add(new LocationSettingsPage(mContext, this));
|
||||
pages.add(new DateTimePage(mContext, this));
|
||||
pages.add(new FinishPage(mContext, this));
|
||||
return new PageList(pages.toArray(new SetupPage[pages.size()]));
|
||||
}
|
||||
|
||||
|
||||
}
|
267
src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java
Normal file
@ -0,0 +1,267 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.ServiceState;
|
||||
import android.telephony.SignalStrength;
|
||||
import android.telephony.SubInfoRecord;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.ui.SetupPageFragment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseDataSimPage extends SetupPage {
|
||||
|
||||
public static final String TAG = "ChooseDataSimPage";
|
||||
|
||||
public ChooseDataSimPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(SetupPage.KEY_PAGE_ARGUMENT, getKey());
|
||||
|
||||
ChooseDataSimFragment fragment = new ChooseDataSimFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_choose_data_sim;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextButtonTitleResId() {
|
||||
return R.string.skip;
|
||||
}
|
||||
|
||||
|
||||
public static class ChooseDataSimFragment extends SetupPageFragment {
|
||||
|
||||
private ViewGroup mPageView;
|
||||
private SparseArray<TextView> mNameViews;
|
||||
private SparseArray<ImageView> mSignalViews;
|
||||
private SparseArray<CheckBox> mCheckBoxes;
|
||||
|
||||
private TelephonyManager mPhone;
|
||||
private List<SubInfoRecord> mSubInfoRecords;
|
||||
private SparseArray<SignalStrength> mSignalStrengths;
|
||||
private SparseArray<ServiceState> mServiceStates;
|
||||
private SparseArray<PhoneStateListener> mPhoneStateListeners;
|
||||
|
||||
private View.OnClickListener mSetDataSimClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
SubInfoRecord subInfoRecord = (SubInfoRecord)view.getTag();
|
||||
if (subInfoRecord != null) {
|
||||
SubscriptionManager.setDefaultDataSubId(subInfoRecord.subId);
|
||||
setDataSubChecked(subInfoRecord);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void initializePage() {
|
||||
mPageView = (ViewGroup)mRootView.findViewById(R.id.page_view);
|
||||
mSubInfoRecords = SubscriptionManager.getActiveSubInfoList();
|
||||
int simCount = mSubInfoRecords.size();
|
||||
mNameViews = new SparseArray<TextView>(simCount);
|
||||
mSignalViews = new SparseArray<ImageView>(simCount);
|
||||
mCheckBoxes = new SparseArray<CheckBox>(simCount);
|
||||
mServiceStates = new SparseArray<ServiceState>(simCount);
|
||||
mSignalStrengths = new SparseArray<SignalStrength>(simCount);
|
||||
mPhoneStateListeners = new SparseArray<PhoneStateListener>(simCount);
|
||||
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
||||
for (int i = 0; i < simCount; i++) {
|
||||
View simRow = inflater.inflate(R.layout.data_sim_row, null);
|
||||
mPageView.addView(simRow);
|
||||
SubInfoRecord subInfoRecord = mSubInfoRecords.get(i);
|
||||
simRow.setTag(subInfoRecord);
|
||||
simRow.setOnClickListener(mSetDataSimClickListener);
|
||||
mNameViews.put(i, (TextView) simRow.findViewById(R.id.sim_title));
|
||||
mSignalViews.put(i, (ImageView) simRow.findViewById(R.id.signal));
|
||||
mCheckBoxes.put(i, (CheckBox) simRow.findViewById(R.id.enable_check));
|
||||
mPhoneStateListeners.put(i, createPhoneStateListener(subInfoRecord));
|
||||
mPageView.addView(inflater.inflate(R.layout.divider, null));
|
||||
}
|
||||
mPhone = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE);
|
||||
for (int i = 0; i < mPhoneStateListeners.size(); i++) {
|
||||
mPhone.listen(mPhoneStateListeners.get(i),
|
||||
PhoneStateListener.LISTEN_SERVICE_STATE
|
||||
| PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
|
||||
}
|
||||
updateSignalStrengths();
|
||||
updateCurrentDataSub();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutResource() {
|
||||
return R.layout.choose_data_sim_page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateSignalStrengths();
|
||||
updateCurrentDataSub();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
for (int i = 0; i < mPhoneStateListeners.size(); i++) {
|
||||
mPhone.listen(mPhoneStateListeners.get(i), PhoneStateListener.LISTEN_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
private PhoneStateListener createPhoneStateListener(final SubInfoRecord subInfoRecord) {
|
||||
return new PhoneStateListener(subInfoRecord.subId) {
|
||||
|
||||
@Override
|
||||
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
|
||||
mSignalStrengths.put(subInfoRecord.slotId, signalStrength);
|
||||
updateSignalStrength(subInfoRecord);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceStateChanged(ServiceState state) {
|
||||
mServiceStates.put(subInfoRecord.slotId, state);
|
||||
updateSignalStrength(subInfoRecord);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void updateSignalStrengths() {
|
||||
for (int i = 0; i < mSubInfoRecords.size(); i++) {
|
||||
updateSignalStrength(mSubInfoRecords.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
private void setDataSubChecked(SubInfoRecord subInfoRecord) {
|
||||
for (int i = 0; i < mCheckBoxes.size(); i++) {
|
||||
mCheckBoxes.get(i).setChecked(subInfoRecord.slotId == i);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCurrentDataSub() {
|
||||
for (int i = 0; i < mSubInfoRecords.size(); i++) {
|
||||
SubInfoRecord subInfoRecord = mSubInfoRecords.get(i);
|
||||
mCheckBoxes.get(i).setChecked(SubscriptionManager.getDefaultDataSubId()
|
||||
== subInfoRecord.subId);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCarrierText(SubInfoRecord subInfoRecord) {
|
||||
String name = mPhone.getNetworkOperatorName(subInfoRecord.subId);
|
||||
ServiceState serviceState = mServiceStates.get(subInfoRecord.slotId);
|
||||
if (TextUtils.isEmpty(name)) {
|
||||
if (serviceState != null && serviceState.isEmergencyOnly()) {
|
||||
name = getString(R.string.setup_mobile_data_emergency_only);
|
||||
} else {
|
||||
name = getString(R.string.setup_mobile_data_no_service);
|
||||
}
|
||||
}
|
||||
String formattedName =
|
||||
getString(R.string.data_sim_name, subInfoRecord.slotId + 1, name);
|
||||
mNameViews.get(subInfoRecord.slotId).setText(formattedName);
|
||||
}
|
||||
|
||||
private void updateSignalStrength(SubInfoRecord subInfoRecord) {
|
||||
ImageView signalView = mSignalViews.get(subInfoRecord.slotId);
|
||||
SignalStrength signalStrength = mSignalStrengths.get(subInfoRecord.slotId);
|
||||
if (!hasService(subInfoRecord)) {
|
||||
signalView.setImageResource(R.drawable.ic_signal_no_signal);
|
||||
} else {
|
||||
if (signalStrength != null) {
|
||||
int resId;
|
||||
switch (signalStrength.getLevel()) {
|
||||
case 4:
|
||||
resId = R.drawable.ic_signal_4;
|
||||
break;
|
||||
case 3:
|
||||
resId = R.drawable.ic_signal_3;
|
||||
break;
|
||||
case 2:
|
||||
resId = R.drawable.ic_signal_2;
|
||||
break;
|
||||
case 1:
|
||||
resId = R.drawable.ic_signal_1;
|
||||
break;
|
||||
default:
|
||||
resId = R.drawable.ic_signal_0;
|
||||
break;
|
||||
}
|
||||
signalView.setImageResource(resId);
|
||||
}
|
||||
}
|
||||
updateCarrierText(subInfoRecord);
|
||||
}
|
||||
|
||||
private boolean hasService(SubInfoRecord subInfoRecord) {
|
||||
boolean retVal;
|
||||
ServiceState serviceState = mServiceStates.get(subInfoRecord.slotId);
|
||||
if (serviceState != null) {
|
||||
// Consider the device to be in service if either voice or data service is available.
|
||||
// Some SIM cards are marketed as data-only and do not support voice service, and on
|
||||
// these SIM cards, we want to show signal bars for data service as well as the "no
|
||||
// service" or "emergency calls only" text that indicates that voice is not available.
|
||||
switch(serviceState.getVoiceRegState()) {
|
||||
case ServiceState.STATE_POWER_OFF:
|
||||
retVal = false;
|
||||
break;
|
||||
case ServiceState.STATE_OUT_OF_SERVICE:
|
||||
case ServiceState.STATE_EMERGENCY_ONLY:
|
||||
retVal = serviceState.getDataRegState() == ServiceState.STATE_IN_SERVICE;
|
||||
break;
|
||||
default:
|
||||
retVal = true;
|
||||
}
|
||||
} else {
|
||||
retVal = false;
|
||||
}
|
||||
Log.d(TAG, "hasService: mServiceState=" + serviceState + " retVal=" + retVal);
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import com.cyanogenmod.setupwizard.SetupWizardApp;
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
|
||||
import android.accounts.AccountManager;
|
||||
import android.accounts.AccountManagerCallback;
|
||||
import android.accounts.AccountManagerFuture;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class CyanogenAccountPage extends SetupPage {
|
||||
|
||||
public static final String TAG = "CyanogenAccountPage";
|
||||
|
||||
public CyanogenAccountPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextButtonTitleResId() {
|
||||
return R.string.skip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doLoadAction(Activity context, int action) {
|
||||
launchCyanogenAccountSetup(context, action);
|
||||
}
|
||||
|
||||
public void launchCyanogenAccountSetup(final Activity activity, final int action) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(SetupWizardApp.EXTRA_FIRST_RUN, true);
|
||||
AccountManager
|
||||
.get(activity).addAccount(SetupWizardApp.ACCOUNT_TYPE_CYANOGEN, null, null, bundle,
|
||||
activity, new AccountManagerCallback<Bundle>() {
|
||||
@Override
|
||||
public void run(AccountManagerFuture<Bundle> bundleAccountManagerFuture) {
|
||||
if (activity == null) return; //There is a chance this activity has been torn down.
|
||||
if (accountExists(activity, SetupWizardApp.ACCOUNT_TYPE_CYANOGEN)) {
|
||||
setCompleted(true);
|
||||
getCallbacks().onNextPage();
|
||||
} else {
|
||||
if (action == Page.ACTION_NEXT) {
|
||||
getCallbacks().onNextPage();
|
||||
} else {
|
||||
getCallbacks().onPreviousPage();
|
||||
}
|
||||
}
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
private boolean accountExists(Activity activity, String accountType) {
|
||||
return AccountManager.get(activity).getAccountsByType(accountType).length > 0;
|
||||
}
|
||||
}
|
464
src/com/cyanogenmod/setupwizard/setup/DateTimePage.java
Normal file
@ -0,0 +1,464 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.ui.SetupPageFragment;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.app.Fragment;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.XmlResourceParser;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.format.DateFormat;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.DatePicker;
|
||||
import android.widget.SimpleAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class DateTimePage extends SetupPage {
|
||||
|
||||
public static final String TAG = "DateTimePage";
|
||||
|
||||
private static final String KEY_ID = "id"; // value: String
|
||||
private static final String KEY_DISPLAYNAME = "name"; // value: String
|
||||
private static final String KEY_GMT = "gmt"; // value: String
|
||||
private static final String KEY_OFFSET = "offset"; // value: int (Integer)
|
||||
private static final String XMLTAG_TIMEZONE = "timezone";
|
||||
|
||||
private static final int HOURS_1 = 60 * 60000;
|
||||
|
||||
|
||||
public DateTimePage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(SetupPage.KEY_PAGE_ARGUMENT, getKey());
|
||||
|
||||
DateTimeFragment fragment = new DateTimeFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_datetime;
|
||||
}
|
||||
|
||||
public static class DateTimeFragment extends SetupPageFragment
|
||||
implements TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener {
|
||||
|
||||
private TimeZone mCurrentTimeZone;
|
||||
private View mDateView;
|
||||
private View mTimeView;
|
||||
private TextView mDateTextView;
|
||||
private TextView mTimeTextView;
|
||||
|
||||
|
||||
private final Handler mHandler = new Handler();
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Register for time ticks and other reasons for time change
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_TIME_TICK);
|
||||
filter.addAction(Intent.ACTION_TIME_CHANGED);
|
||||
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
|
||||
getActivity().registerReceiver(mIntentReceiver, filter, null, null);
|
||||
|
||||
updateTimeAndDateDisplay(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
getActivity().unregisterReceiver(mIntentReceiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializePage() {
|
||||
final Spinner spinner = (Spinner) mRootView.findViewById(R.id.timezone_list);
|
||||
final SimpleAdapter adapter = constructTimezoneAdapter(getActivity(), false);
|
||||
mCurrentTimeZone = TimeZone.getDefault();
|
||||
mDateView = mRootView.findViewById(R.id.date_item);
|
||||
mDateView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
showDatePicker();
|
||||
}
|
||||
});
|
||||
mTimeView = mRootView.findViewById(R.id.time_item);
|
||||
mTimeView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
showTimePicker();
|
||||
}
|
||||
});
|
||||
mDateTextView = (TextView)mRootView.findViewById(R.id.date_text);
|
||||
mTimeTextView = (TextView)mRootView.findViewById(R.id.time_text);
|
||||
// Pre-select current/default timezone
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int tzIndex = getTimeZoneIndex(adapter, mCurrentTimeZone);
|
||||
spinner.setAdapter(adapter);
|
||||
if (tzIndex != -1) {
|
||||
spinner.setSelection(tzIndex);
|
||||
}
|
||||
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
|
||||
final Map<?, ?> map = (Map<?, ?>) adapterView.getItemAtPosition(position);
|
||||
final String tzId = (String) map.get(KEY_ID);
|
||||
if (mCurrentTimeZone != null && !mCurrentTimeZone.getID().equals(tzId)) {
|
||||
// Update the system timezone value
|
||||
final Activity activity = getActivity();
|
||||
final AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
|
||||
alarm.setTimeZone(tzId);
|
||||
mCurrentTimeZone = TimeZone.getTimeZone(tzId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> adapterView) {
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showDatePicker() {
|
||||
DatePickerFragment datePickerFragment = DatePickerFragment.newInstance();
|
||||
datePickerFragment.setOnDateSetListener(this);
|
||||
datePickerFragment.show(getFragmentManager(), DatePickerFragment.TAG);
|
||||
}
|
||||
|
||||
private void showTimePicker() {
|
||||
TimePickerFragment timePickerFragment = TimePickerFragment.newInstance();
|
||||
timePickerFragment.setOnTimeSetListener(this);
|
||||
timePickerFragment.show(getFragmentManager(), TimePickerFragment.TAG);
|
||||
}
|
||||
|
||||
public void updateTimeAndDateDisplay(Context context) {
|
||||
java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context);
|
||||
final Calendar now = Calendar.getInstance();
|
||||
mTimeTextView.setText(DateFormat.getTimeFormat(getActivity()).format(now.getTime()));
|
||||
mDateTextView.setText(shortDateFormat.format(now.getTime()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutResource() {
|
||||
return R.layout.setup_datetime_page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDateSet(DatePicker view, int year, int month, int day) {
|
||||
final Activity activity = getActivity();
|
||||
if (activity != null) {
|
||||
setDate(activity, year, month, day);
|
||||
updateTimeAndDateDisplay(activity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
|
||||
final Activity activity = getActivity();
|
||||
if (activity != null) {
|
||||
setTime(activity, hourOfDay, minute);
|
||||
updateTimeAndDateDisplay(activity);
|
||||
}
|
||||
}
|
||||
|
||||
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
final Activity activity = getActivity();
|
||||
if (activity != null) {
|
||||
updateTimeAndDateDisplay(activity);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
private static SimpleAdapter constructTimezoneAdapter(Context context,
|
||||
boolean sortedByName) {
|
||||
final String[] from = new String[] {KEY_DISPLAYNAME, KEY_GMT};
|
||||
final int[] to = new int[] {android.R.id.text1, android.R.id.text2};
|
||||
|
||||
final String sortKey = (sortedByName ? KEY_DISPLAYNAME : KEY_OFFSET);
|
||||
final TimeZoneComparator comparator = new TimeZoneComparator(sortKey);
|
||||
final List<HashMap<String, Object>> sortedList = getZones(context);
|
||||
Collections.sort(sortedList, comparator);
|
||||
final SimpleAdapter adapter = new SimpleAdapter(context,
|
||||
sortedList,
|
||||
R.layout.date_time_setup_custom_list_item_2,
|
||||
from,
|
||||
to);
|
||||
|
||||
return adapter;
|
||||
}
|
||||
|
||||
private static List<HashMap<String, Object>> getZones(Context context) {
|
||||
final List<HashMap<String, Object>> myData = new ArrayList<HashMap<String, Object>>();
|
||||
final long date = Calendar.getInstance().getTimeInMillis();
|
||||
try {
|
||||
XmlResourceParser xrp = context.getResources().getXml(R.xml.timezones);
|
||||
while (xrp.next() != XmlResourceParser.START_TAG)
|
||||
continue;
|
||||
xrp.next();
|
||||
while (xrp.getEventType() != XmlResourceParser.END_TAG) {
|
||||
while (xrp.getEventType() != XmlResourceParser.START_TAG) {
|
||||
if (xrp.getEventType() == XmlResourceParser.END_DOCUMENT) {
|
||||
return myData;
|
||||
}
|
||||
xrp.next();
|
||||
}
|
||||
if (xrp.getName().equals(XMLTAG_TIMEZONE)) {
|
||||
String id = xrp.getAttributeValue(0);
|
||||
String displayName = xrp.nextText();
|
||||
addItem(myData, id, displayName, date);
|
||||
}
|
||||
while (xrp.getEventType() != XmlResourceParser.END_TAG) {
|
||||
xrp.next();
|
||||
}
|
||||
xrp.next();
|
||||
}
|
||||
xrp.close();
|
||||
} catch (XmlPullParserException xppe) {
|
||||
Log.e(TAG, "Ill-formatted timezones.xml file");
|
||||
} catch (java.io.IOException ioe) {
|
||||
Log.e(TAG, "Unable to read timezones.xml file");
|
||||
}
|
||||
|
||||
return myData;
|
||||
}
|
||||
|
||||
private static void addItem(
|
||||
List<HashMap<String, Object>> myData, String id, String displayName, long date) {
|
||||
final HashMap<String, Object> map = new HashMap<String, Object>();
|
||||
map.put(KEY_ID, id);
|
||||
map.put(KEY_DISPLAYNAME, displayName);
|
||||
final TimeZone tz = TimeZone.getTimeZone(id);
|
||||
final int offset = tz.getOffset(date);
|
||||
final int p = Math.abs(offset);
|
||||
final StringBuilder name = new StringBuilder();
|
||||
name.append("GMT");
|
||||
|
||||
if (offset < 0) {
|
||||
name.append('-');
|
||||
} else {
|
||||
name.append('+');
|
||||
}
|
||||
|
||||
name.append(p / (HOURS_1));
|
||||
name.append(':');
|
||||
|
||||
int min = p / 60000;
|
||||
min %= 60;
|
||||
|
||||
if (min < 10) {
|
||||
name.append('0');
|
||||
}
|
||||
name.append(min);
|
||||
|
||||
map.put(KEY_GMT, name.toString());
|
||||
map.put(KEY_OFFSET, offset);
|
||||
|
||||
myData.add(map);
|
||||
}
|
||||
|
||||
private static int getTimeZoneIndex(SimpleAdapter adapter, TimeZone tz) {
|
||||
final String defaultId = tz.getID();
|
||||
final int listSize = adapter.getCount();
|
||||
for (int i = 0; i < listSize; i++) {
|
||||
// Using HashMap<String, Object> induces unnecessary warning.
|
||||
final HashMap<?,?> map = (HashMap<?,?>)adapter.getItem(i);
|
||||
final String id = (String)map.get(KEY_ID);
|
||||
if (defaultId.equals(id)) {
|
||||
// If current timezone is in this list, move focus to it
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private static void setDate(Context context, int year, int month, int day) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
|
||||
c.set(Calendar.YEAR, year);
|
||||
c.set(Calendar.MONTH, month);
|
||||
c.set(Calendar.DAY_OF_MONTH, day);
|
||||
long when = c.getTimeInMillis();
|
||||
|
||||
if (when / 1000 < Integer.MAX_VALUE) {
|
||||
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setTime(Context context, int hourOfDay, int minute) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
|
||||
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
|
||||
c.set(Calendar.MINUTE, minute);
|
||||
c.set(Calendar.SECOND, 0);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
long when = c.getTimeInMillis();
|
||||
|
||||
if (when / 1000 < Integer.MAX_VALUE) {
|
||||
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
|
||||
}
|
||||
}
|
||||
|
||||
private static class TimeZoneComparator implements Comparator<HashMap<?, ?>> {
|
||||
private String mSortingKey;
|
||||
|
||||
public TimeZoneComparator(String sortingKey) {
|
||||
mSortingKey = sortingKey;
|
||||
}
|
||||
|
||||
public void setSortingKey(String sortingKey) {
|
||||
mSortingKey = sortingKey;
|
||||
}
|
||||
|
||||
public int compare(HashMap<?, ?> map1, HashMap<?, ?> map2) {
|
||||
Object value1 = map1.get(mSortingKey);
|
||||
Object value2 = map2.get(mSortingKey);
|
||||
|
||||
/*
|
||||
* This should never happen, but just in-case, put non-comparable
|
||||
* items at the end.
|
||||
*/
|
||||
if (!isComparable(value1)) {
|
||||
return isComparable(value2) ? 1 : 0;
|
||||
} else if (!isComparable(value2)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return ((Comparable) value1).compareTo(value2);
|
||||
}
|
||||
|
||||
private boolean isComparable(Object value) {
|
||||
return (value != null) && (value instanceof Comparable);
|
||||
}
|
||||
}
|
||||
|
||||
private static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
|
||||
|
||||
private static String TAG = TimePickerFragment.class.getSimpleName();
|
||||
|
||||
private TimePickerDialog.OnTimeSetListener mOnTimeSetListener;
|
||||
|
||||
public static TimePickerFragment newInstance() {
|
||||
TimePickerFragment frag = new TimePickerFragment();
|
||||
return frag;
|
||||
}
|
||||
|
||||
private void setOnTimeSetListener(TimePickerDialog.OnTimeSetListener onTimeSetListener) {
|
||||
mOnTimeSetListener = onTimeSetListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
|
||||
if (mOnTimeSetListener != null) {
|
||||
mOnTimeSetListener.onTimeSet(view, hourOfDay, minute);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
return new TimePickerDialog(
|
||||
getActivity(),
|
||||
this,
|
||||
calendar.get(Calendar.HOUR_OF_DAY),
|
||||
calendar.get(Calendar.MINUTE),
|
||||
DateFormat.is24HourFormat(getActivity()));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
|
||||
|
||||
private static String TAG = DatePickerFragment.class.getSimpleName();
|
||||
|
||||
private DatePickerDialog.OnDateSetListener mOnDateSetListener;
|
||||
|
||||
public static DatePickerFragment newInstance() {
|
||||
DatePickerFragment frag = new DatePickerFragment();
|
||||
return frag;
|
||||
}
|
||||
|
||||
private void setOnDateSetListener(DatePickerDialog.OnDateSetListener onDateSetListener) {
|
||||
mOnDateSetListener = onDateSetListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDateSet(DatePicker view, int year, int month, int day) {
|
||||
if (mOnDateSetListener != null) {
|
||||
mOnDateSetListener.onDateSet(view, year, month, day);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
return new DatePickerDialog(
|
||||
getActivity(),
|
||||
this,
|
||||
calendar.get(Calendar.YEAR),
|
||||
calendar.get(Calendar.MONTH),
|
||||
calendar.get(Calendar.DAY_OF_MONTH));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
86
src/com/cyanogenmod/setupwizard/setup/FinishPage.java
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.ui.SetupPageFragment;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class FinishPage extends SetupPage {
|
||||
|
||||
public static final String TAG = "FinishPage";
|
||||
|
||||
public FinishPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(SetupPage.KEY_PAGE_ARGUMENT, getKey());
|
||||
|
||||
FinishFragment fragment = new FinishFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_complete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doNextAction() {
|
||||
getCallbacks().onFinish();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextButtonTitleResId() {
|
||||
return R.string.start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPrevButtonTitleResId() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static class FinishFragment extends SetupPageFragment {
|
||||
|
||||
@Override
|
||||
protected void initializePage() {}
|
||||
|
||||
@Override
|
||||
protected int getLayoutResource() {
|
||||
return R.layout.setup_finished_page;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeaderLayoutResource() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
90
src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.accounts.AccountManager;
|
||||
import android.accounts.AccountManagerCallback;
|
||||
import android.accounts.AccountManagerFuture;
|
||||
import android.accounts.AuthenticatorException;
|
||||
import android.accounts.OperationCanceledException;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.SetupWizardApp;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GmsAccountPage extends SetupPage {
|
||||
|
||||
public static final String TAG = "GmsAccountPage";
|
||||
|
||||
public GmsAccountPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_gms_account;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextButtonTitleResId() {
|
||||
return R.string.skip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doLoadAction(Activity context, int action) {
|
||||
launchGmsAccountSetup(context, action);
|
||||
}
|
||||
|
||||
public void launchGmsAccountSetup(final Activity activity, final int action) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(SetupWizardApp.EXTRA_FIRST_RUN, true);
|
||||
bundle.putBoolean(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
||||
AccountManager
|
||||
.get(activity).addAccount(SetupWizardApp.ACCOUNT_TYPE_GMS, null, null,
|
||||
bundle, activity, new AccountManagerCallback<Bundle>() {
|
||||
@Override
|
||||
public void run(AccountManagerFuture<Bundle> bundleAccountManagerFuture) {
|
||||
//There is a chance this activity has been torn down.
|
||||
if (activity == null) return;
|
||||
String token = null;
|
||||
try {
|
||||
token = bundleAccountManagerFuture.getResult().getString(AccountManager.KEY_AUTHTOKEN);
|
||||
} catch (OperationCanceledException e) {
|
||||
} catch (IOException e) {
|
||||
} catch (AuthenticatorException e) {
|
||||
}
|
||||
if (token != null) {
|
||||
setCompleted(true);
|
||||
}
|
||||
if (action == Page.ACTION_NEXT) {
|
||||
getCallbacks().onNextPage();
|
||||
} else {
|
||||
getCallbacks().onPreviousPage();
|
||||
}
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
}
|
194
src/com/cyanogenmod/setupwizard/setup/LocationSettingsPage.java
Normal file
@ -0,0 +1,194 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.ContentQueryMap;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.ui.SetupPageFragment;
|
||||
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
public class LocationSettingsPage extends SetupPage {
|
||||
|
||||
private static final String TAG = "LocationSettingsPage";
|
||||
|
||||
public LocationSettingsPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(Page.KEY_PAGE_ARGUMENT, getKey());
|
||||
|
||||
LocationSettingsFragment fragment = new LocationSettingsFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_location;
|
||||
}
|
||||
|
||||
public static class LocationSettingsFragment extends SetupPageFragment {
|
||||
|
||||
private View mLocationRow;
|
||||
private View mGpsRow;
|
||||
private View mNetworkRow;
|
||||
private CheckBox mNetwork;
|
||||
private CheckBox mGps;
|
||||
private CheckBox mLocationAccess;
|
||||
|
||||
private ContentResolver mContentResolver;
|
||||
|
||||
// These provide support for receiving notification when Location Manager settings change.
|
||||
// This is necessary because the Network Location Provider can change settings
|
||||
// if the user does not confirm enabling the provider.
|
||||
private ContentQueryMap mContentQueryMap;
|
||||
private Observer mSettingsObserver;
|
||||
|
||||
|
||||
private View.OnClickListener mLocationClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
onToggleLocationAccess(!mLocationAccess.isChecked());
|
||||
}
|
||||
};
|
||||
|
||||
private View.OnClickListener mGpsClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Settings.Secure.setLocationProviderEnabled(mContentResolver,
|
||||
LocationManager.GPS_PROVIDER, !mGps.isChecked());
|
||||
}
|
||||
};
|
||||
|
||||
private View.OnClickListener mNetworkClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Settings.Secure.setLocationProviderEnabled(mContentResolver,
|
||||
LocationManager.NETWORK_PROVIDER, !mNetwork.isChecked());
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mContentResolver = getActivity().getContentResolver();
|
||||
getActivity().getWindow().setStatusBarColor(getResources().getColor(R.color.primary_dark));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializePage() {
|
||||
mLocationRow = mRootView.findViewById(R.id.location);
|
||||
mLocationRow.setOnClickListener(mLocationClickListener);
|
||||
mLocationAccess = (CheckBox) mRootView.findViewById(R.id.location_checkbox);
|
||||
mGpsRow = mRootView.findViewById(R.id.gps);
|
||||
mGpsRow.setOnClickListener(mGpsClickListener);
|
||||
mGps = (CheckBox) mRootView.findViewById(R.id.gps_checkbox);
|
||||
mNetworkRow = mRootView.findViewById(R.id.network);
|
||||
mNetworkRow.setOnClickListener(mNetworkClickListener);
|
||||
mNetwork = (CheckBox) mRootView.findViewById(R.id.network_checkbox);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutResource() {
|
||||
return R.layout.location_settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getHeaderLayoutResource() {
|
||||
return R.layout.header_condensed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateLocationToggles();
|
||||
if (mSettingsObserver == null) {
|
||||
mSettingsObserver = new Observer() {
|
||||
public void update(Observable o, Object arg) {
|
||||
updateLocationToggles();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
mContentQueryMap.addObserver(mSettingsObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
// listen for Location Manager settings changes
|
||||
Cursor settingsCursor = getActivity().getContentResolver().query(Settings.Secure.CONTENT_URI, null,
|
||||
"(" + Settings.System.NAME + "=?)",
|
||||
new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED},
|
||||
null);
|
||||
mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if (mSettingsObserver != null) {
|
||||
mContentQueryMap.deleteObserver(mSettingsObserver);
|
||||
}
|
||||
mContentQueryMap.close();
|
||||
}
|
||||
|
||||
|
||||
private void updateLocationToggles() {
|
||||
boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(
|
||||
mContentResolver, LocationManager.GPS_PROVIDER);
|
||||
boolean networkEnabled = Settings.Secure.isLocationProviderEnabled(
|
||||
mContentResolver, LocationManager.NETWORK_PROVIDER);
|
||||
mGps.setChecked(gpsEnabled);
|
||||
mNetwork.setChecked(networkEnabled);
|
||||
mLocationAccess.setChecked(gpsEnabled || networkEnabled);
|
||||
}
|
||||
|
||||
private void onToggleLocationAccess(boolean checked) {
|
||||
Settings.Secure.setLocationProviderEnabled(mContentResolver,
|
||||
LocationManager.GPS_PROVIDER, checked);
|
||||
mGps.setEnabled(checked);
|
||||
mGpsRow.setEnabled(checked);
|
||||
Settings.Secure.setLocationProviderEnabled(mContentResolver,
|
||||
LocationManager.NETWORK_PROVIDER, checked);
|
||||
mNetwork.setEnabled(checked);
|
||||
mNetworkRow.setEnabled(checked);
|
||||
updateLocationToggles();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
211
src/com/cyanogenmod/setupwizard/setup/MobileDataPage.java
Normal file
@ -0,0 +1,211 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.ServiceState;
|
||||
import android.telephony.SignalStrength;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Switch;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.ui.SetupPageFragment;
|
||||
import com.cyanogenmod.setupwizard.util.SetupWizardUtils;
|
||||
|
||||
public class MobileDataPage extends SetupPage {
|
||||
|
||||
public static final String TAG = "MobileDataPage";
|
||||
|
||||
public MobileDataPage(Context context, SetupDataCallbacks callbacks) {
|
||||
super(context, callbacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(SetupPage.KEY_PAGE_ARGUMENT, getKey());
|
||||
|
||||
MobileDataFragment fragment = new MobileDataFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleResId() {
|
||||
return R.string.setup_mobile_data;
|
||||
}
|
||||
|
||||
public static class MobileDataFragment extends SetupPageFragment {
|
||||
|
||||
private View mEnableDataRow;
|
||||
private Switch mEnableMobileData;
|
||||
private ImageView mSignalView;
|
||||
private TextView mNameView;
|
||||
|
||||
private TelephonyManager mPhone;
|
||||
private SignalStrength mSignalStrength;
|
||||
private ServiceState mServiceState;
|
||||
|
||||
private PhoneStateListener mPhoneStateListener =
|
||||
new PhoneStateListener(SubscriptionManager.getDefaultDataSubId()) {
|
||||
|
||||
@Override
|
||||
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
|
||||
mSignalStrength = signalStrength;
|
||||
updateSignalStrength();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceStateChanged(ServiceState state) {
|
||||
mServiceState = state;
|
||||
updateSignalStrength();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private View.OnClickListener mEnableDataClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
boolean checked = !mEnableMobileData.isChecked();
|
||||
SetupWizardUtils.setMobileDataEnabled(getActivity(), checked);
|
||||
mEnableMobileData.setChecked(checked);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void initializePage() {
|
||||
mEnableDataRow = mRootView.findViewById(R.id.data);
|
||||
mEnableDataRow.setOnClickListener(mEnableDataClickListener);
|
||||
mEnableMobileData = (Switch) mRootView.findViewById(R.id.data_switch);
|
||||
mSignalView = (ImageView) mRootView.findViewById(R.id.signal);
|
||||
mNameView = (TextView) mRootView.findViewById(R.id.enable_data_title);
|
||||
updateDataConnectionStatus();
|
||||
updateSignalStrength();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutResource() {
|
||||
return R.layout.mobile_data_settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateDataConnectionStatus();
|
||||
updateSignalStrength();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
mPhone = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE);
|
||||
mPhone.listen(mPhoneStateListener,
|
||||
PhoneStateListener.LISTEN_SERVICE_STATE
|
||||
| PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
super.onDetach();
|
||||
mPhone.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
||||
}
|
||||
|
||||
private void updateCarrierText() {
|
||||
String name = mPhone.getNetworkOperatorName(SubscriptionManager.getDefaultDataSubId());
|
||||
if (TextUtils.isEmpty(name)) {
|
||||
if (mServiceState != null && mServiceState.isEmergencyOnly()) {
|
||||
name = getString(R.string.setup_mobile_data_emergency_only);
|
||||
} else {
|
||||
name = getString(R.string.setup_mobile_data_no_service);
|
||||
}
|
||||
}
|
||||
mNameView.setText(name);
|
||||
}
|
||||
|
||||
private void updateSignalStrength() {
|
||||
if (!hasService()) {
|
||||
mSignalView.setImageResource(R.drawable.ic_signal_no_signal);
|
||||
} else {
|
||||
if (mSignalStrength != null) {
|
||||
int resId;
|
||||
switch (mSignalStrength.getLevel()) {
|
||||
case 4:
|
||||
resId = R.drawable.ic_signal_4;
|
||||
break;
|
||||
case 3:
|
||||
resId = R.drawable.ic_signal_3;
|
||||
break;
|
||||
case 2:
|
||||
resId = R.drawable.ic_signal_2;
|
||||
break;
|
||||
case 1:
|
||||
resId = R.drawable.ic_signal_1;
|
||||
break;
|
||||
default:
|
||||
resId = R.drawable.ic_signal_0;
|
||||
break;
|
||||
}
|
||||
mSignalView.setImageResource(resId);
|
||||
}
|
||||
}
|
||||
updateCarrierText();
|
||||
}
|
||||
|
||||
private void updateDataConnectionStatus() {
|
||||
mEnableMobileData.setChecked(SetupWizardUtils.isMobileDataEnabled(getActivity()));
|
||||
}
|
||||
|
||||
private boolean hasService() {
|
||||
boolean retVal;
|
||||
if (mServiceState != null) {
|
||||
// Consider the device to be in service if either voice or data service is available.
|
||||
// Some SIM cards are marketed as data-only and do not support voice service, and on
|
||||
// these SIM cards, we want to show signal bars for data service as well as the "no
|
||||
// service" or "emergency calls only" text that indicates that voice is not available.
|
||||
switch(mServiceState.getVoiceRegState()) {
|
||||
case ServiceState.STATE_POWER_OFF:
|
||||
retVal = false;
|
||||
break;
|
||||
case ServiceState.STATE_OUT_OF_SERVICE:
|
||||
case ServiceState.STATE_EMERGENCY_ONLY:
|
||||
retVal = mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE;
|
||||
break;
|
||||
default:
|
||||
retVal = true;
|
||||
}
|
||||
} else {
|
||||
retVal = false;
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
46
src/com/cyanogenmod/setupwizard/setup/Page.java
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
public interface Page {
|
||||
|
||||
public static final String KEY_PAGE_ARGUMENT = "key_arg";
|
||||
|
||||
public static final int ACTION_NEXT = 1;
|
||||
public static final int ACTION_PREVIOUS = 2;
|
||||
|
||||
public String getKey();
|
||||
public int getTitleResId();
|
||||
public int getPrevButtonTitleResId();
|
||||
public int getNextButtonTitleResId();
|
||||
public Fragment getFragment();
|
||||
public Bundle getData();
|
||||
public void resetData(Bundle data);
|
||||
public boolean isRequired();
|
||||
public Page setRequired(boolean required);
|
||||
public boolean isCompleted();
|
||||
public void setCompleted(boolean completed);
|
||||
public boolean doPreviousAction();
|
||||
public boolean doNextAction();
|
||||
public void doLoadAction(Activity context, int action);
|
||||
public abstract boolean onActivityResult(int requestCode, int resultCode, Intent data);
|
||||
}
|
44
src/com/cyanogenmod/setupwizard/setup/PageList.java
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
public class PageList extends LinkedHashMap<String, Page> {
|
||||
|
||||
public PageList(Page... pages) {
|
||||
for (Page page : pages) {
|
||||
put(page.getKey(), page);
|
||||
}
|
||||
}
|
||||
|
||||
public Page getPage(String key) {
|
||||
return get(key);
|
||||
}
|
||||
|
||||
public Page getPage(int index) {
|
||||
int i=0;
|
||||
for (Page page : values()) {
|
||||
if (i == index) {
|
||||
return page;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
public interface SetupDataCallbacks {
|
||||
void onNextPage();
|
||||
void onPreviousPage();
|
||||
void onPageLoaded(Page page);
|
||||
void onPageTreeChanged();
|
||||
void onFinish();
|
||||
Page getPage(String key);
|
||||
Page getPage(int key);
|
||||
void onPageViewCreated(LayoutInflater inflater, Bundle savedInstanceState, int layoutResource);
|
||||
}
|
126
src/com/cyanogenmod/setupwizard/setup/SetupPage.java
Normal file
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.cyanogenmod.setupwizard.setup;
|
||||
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentManager;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
|
||||
public abstract class SetupPage implements Page {
|
||||
|
||||
private final SetupDataCallbacks mCallbacks;
|
||||
|
||||
private Bundle mData = new Bundle();
|
||||
private boolean mRequired = false;
|
||||
private boolean mCompleted = false;
|
||||
|
||||
protected final Context mContext;
|
||||
|
||||
protected SetupPage(Context context, SetupDataCallbacks callbacks) {
|
||||
mContext = context;
|
||||
mCallbacks = callbacks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getFragment() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPrevButtonTitleResId() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNextButtonTitleResId() {
|
||||
return R.string.next;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doNextAction() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doPreviousAction() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doLoadAction(Activity context, int action) {
|
||||
if (context == null || context.isFinishing()) { return; }
|
||||
final FragmentManager fragmentManager = context.getFragmentManager();
|
||||
if (action == Page.ACTION_NEXT) {
|
||||
FragmentTransaction transaction = fragmentManager.beginTransaction();
|
||||
transaction.replace(R.id.content, getFragment(), getKey());
|
||||
transaction.commit();
|
||||
} else {
|
||||
FragmentTransaction transaction = fragmentManager.beginTransaction();
|
||||
transaction.replace(R.id.content, getFragment(), getKey());
|
||||
transaction.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRequired() {
|
||||
return mRequired;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page setRequired(boolean required) {
|
||||
mRequired = required;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCompleted() {
|
||||
return mCompleted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompleted(boolean completed) {
|
||||
mCompleted = completed;
|
||||
mCallbacks.onNextPage();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bundle getData() {
|
||||
return mData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetData(Bundle data) {
|
||||
mData = data;
|
||||
mCallbacks.onPageLoaded(this);
|
||||
}
|
||||
|
||||
protected SetupDataCallbacks getCallbacks() {
|
||||
return mCallbacks;
|
||||
}
|
||||
}
|