[tor-commits] [orbot/master] Fixes #304 Onboarding text and slide position are preserved on rotation

n8fr8 at torproject.org n8fr8 at torproject.org
Mon Aug 24 21:02:51 UTC 2020


commit 900a7e86ad018a2cb959bddbd5d3bbc56b194794
Author: bim <dsnake at protonmail.com>
Date:   Tue Jul 28 10:40:00 2020 -0400

    Fixes #304 Onboarding text and slide position are preserved on rotation
---
 app/src/main/AndroidManifest.xml                   |  5 +-
 .../android/ui/onboarding/CustomSlideBigText.java  | 77 ++++++----------------
 .../android/ui/onboarding/OnboardingActivity.java  | 72 +++-----------------
 3 files changed, 35 insertions(+), 119 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3ac50847..43109382 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -100,7 +100,10 @@
                 android:value=".OrbotMainActivity" />
         </activity>
 
-        <activity android:name=".ui.onboarding.OnboardingActivity" />
+        <activity
+            android:name=".ui.onboarding.OnboardingActivity"
+            android:configChanges="orientation|screenSize|screenLayout" />
+
         <activity android:name=".ui.onboarding.BridgeWizardActivity" />
         <activity
             android:name=".ui.onboarding.MoatActivity"
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java b/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
index 870ade8c..c5d21efa 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomSlideBigText.java
@@ -15,36 +15,28 @@ import org.torproject.android.R;
 
 public class CustomSlideBigText extends Fragment {
 
-    private static final String ARG_LAYOUT_RES_ID = "layoutResId";
     private int layoutResId;
     private String mTitle;
     private String mButtonText;
     private String mSubTitle;
     private View.OnClickListener mButtonListener;
-    private TextView bigTextSub, title;
-    private Button button;
 
+    private static final String BUNDLE_KEY_LAYOUT_RES_ID = "layoutResId";
     private static final String BUNDLE_KEY_TITLE = "Title";
     private static final String BUNDLE_KEY_SUBTITLE = "Subtitle";
-    private static final String BUNDLE_KEY_BUTTON_TEXT = "ButtonText";
 
-
-    public static CustomSlideBigText newInstance(int layoutResId) {
-        CustomSlideBigText sampleSlide = new CustomSlideBigText();
-
-        Bundle args = new Bundle();
-        args.putInt(ARG_LAYOUT_RES_ID, layoutResId);
-        sampleSlide.setArguments(args);
-
-        return sampleSlide;
-    }
-
-    public void setTitle(String title) {
-        mTitle = title;
+    public static CustomSlideBigText newInstance(int layoutResId, String title) {
+        return newInstance(layoutResId, title, null);
     }
 
-    public void setSubTitle(String subTitle) {
-        mSubTitle = subTitle;
+    public static CustomSlideBigText newInstance(int layoutResId, String title, String subtitle) {
+        CustomSlideBigText newSlide = new CustomSlideBigText();
+        Bundle args = new Bundle();
+        args.putInt(BUNDLE_KEY_LAYOUT_RES_ID, layoutResId);
+        args.putString(BUNDLE_KEY_TITLE, title);
+        if (subtitle != null) args.putString(BUNDLE_KEY_SUBTITLE, subtitle);
+        newSlide.setArguments(args);
+        return newSlide;
     }
 
     public void showButton(String buttonText, View.OnClickListener buttonListener) {
@@ -55,57 +47,30 @@ public class CustomSlideBigText extends Fragment {
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-        if (getArguments() != null && getArguments().containsKey(ARG_LAYOUT_RES_ID)) {
-            layoutResId = getArguments().getInt(ARG_LAYOUT_RES_ID);
-        }
+        Bundle args = getArguments();
+        if (args == null) return;
+        layoutResId = args.getInt(BUNDLE_KEY_LAYOUT_RES_ID);
+        mTitle = args.getString(BUNDLE_KEY_TITLE);
+        mSubTitle = args.getString(BUNDLE_KEY_SUBTITLE);
     }
 
-    @Nullable
     @Override
-    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
-                             @Nullable Bundle savedInstanceState) {
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(layoutResId, container, false);
-        title = view.findViewById(R.id.custom_slide_big_text);
+        TextView title = view.findViewById(R.id.custom_slide_big_text);
         title.setText(mTitle);
-        bigTextSub = view.findViewById(R.id.custom_slide_big_text_sub);
         if (!TextUtils.isEmpty(mSubTitle)) {
+            TextView bigTextSub = view.findViewById(R.id.custom_slide_big_text_sub);
             bigTextSub.setText(mSubTitle);
             bigTextSub.setVisibility(View.VISIBLE);
         }
 
-        if (mButtonText != null) {
-            button = view.findViewById(R.id.custom_slide_button);
+        if (!TextUtils.isEmpty(mButtonText)) {
+            Button button = view.findViewById(R.id.custom_slide_button);
             button.setVisibility(View.VISIBLE);
             button.setText(mButtonText);
             button.setOnClickListener(mButtonListener);
         }
         return view;
     }
-
-    //Restoring the data
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        if (savedInstanceState != null) {
-            title.setText(savedInstanceState.getString(BUNDLE_KEY_TITLE));
-            bigTextSub.setText(BUNDLE_KEY_SUBTITLE);
-            if (mButtonText != null) {
-                button.setText(savedInstanceState.getString(BUNDLE_KEY_BUTTON_TEXT));
-            }
-
-        }
-    }
-
-    //Saving the data
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putString(BUNDLE_KEY_TITLE, mTitle);
-        outState.putString(BUNDLE_KEY_SUBTITLE, mSubTitle);
-        if (mButtonText != null) {
-            outState.putString(BUNDLE_KEY_BUTTON_TEXT, mButtonText);
-        }
-    }
-
 }
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
index f1f0fabc..8e796724 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
@@ -17,56 +17,25 @@ import org.torproject.android.ui.AppManagerActivity;
 import org.torproject.android.ui.hiddenservices.permissions.PermissionManager;
 
 public class OnboardingActivity extends AppIntro {
-    private CustomSlideBigText welcome, intro2, cs2, cs3;
-
-    private static final String BUNDLE_KEY_WELCOME_FRAGMENT = "Welcome";
-    private static final String BUNDLE_KEY_INTRO_2_FRAGMENT = "Intro2";
-    private static final String BUNDLE_KEY_CS2_FRAGMENT = "CS2";
-    private static final String BUNDLE_KEY_CS3_FRAGMENT = "CS3";
-
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        if (savedInstanceState != null) { // Restoring the fragments
-            welcome = (CustomSlideBigText) getSupportFragmentManager().getFragment(savedInstanceState, BUNDLE_KEY_WELCOME_FRAGMENT);
-            intro2 = (CustomSlideBigText) getSupportFragmentManager().getFragment(savedInstanceState, BUNDLE_KEY_INTRO_2_FRAGMENT);
-            cs2 = (CustomSlideBigText) getSupportFragmentManager().getFragment(savedInstanceState, BUNDLE_KEY_CS2_FRAGMENT);
-            if (PermissionManager.isLollipopOrHigher())
-                cs3 = (CustomSlideBigText) getSupportFragmentManager().getFragment(savedInstanceState, BUNDLE_KEY_CS3_FRAGMENT);
-
-        } else {
-            // Instead of fragments, you can also use our default slide
-            // Just set a title, description, background and image. AppIntro will do the rest.
-            welcome = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
-            welcome.setTitle(getString(R.string.hello));
-            welcome.setSubTitle(getString(R.string.welcome));
-            addSlide(welcome);
-
-            intro2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
-            intro2.setTitle(getString(R.string.browser_the_internet));
-            intro2.setSubTitle(getString(R.string.no_tracking));
-            addSlide(intro2);
+        addSlide(CustomSlideBigText.newInstance(R.layout.custom_slide_big_text, getString(R.string.hello), getString(R.string.welcome)));
+        addSlide(CustomSlideBigText.newInstance(R.layout.custom_slide_big_text, getString(R.string.browser_the_internet), getString(R.string.no_tracking)));
 
-            cs2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
-            cs2.setTitle(getString(R.string.bridges_sometimes));
-            cs2.showButton(getString(R.string.action_more), v -> startActivity(new Intent(OnboardingActivity.this, BridgeWizardActivity.class)));
-            addSlide(cs2);
+        CustomSlideBigText cs2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text, getString(R.string.bridges_sometimes));
+        cs2.showButton(getString(R.string.action_more), v -> startActivity(new Intent(OnboardingActivity.this, BridgeWizardActivity.class)));
+        cs2.showButton(getString(R.string.action_more), v -> startActivity(new Intent(OnboardingActivity.this, BridgeWizardActivity.class)));
+        addSlide(cs2);
 
-            if (PermissionManager.isLollipopOrHigher()) {
-
-                cs3 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
-                cs3.setTitle(getString(R.string.vpn_setup));
-                cs3.setSubTitle(getString(R.string.vpn_setup_sub));
-                cs3.showButton(getString(R.string.action_vpn_choose), v -> startActivityForResult(new Intent(OnboardingActivity.this, AppManagerActivity.class), 9999));
-                addSlide(cs3);
-
-            }
+        if (PermissionManager.isLollipopOrHigher()) {
+            CustomSlideBigText cs3 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text, getString(R.string.vpn_setup), getString(R.string.vpn_setup_sub));
+            cs3.showButton(getString(R.string.action_vpn_choose), v -> startActivity(new Intent(OnboardingActivity.this, AppManagerActivity.class)));
+            addSlide(cs3);
         }
 
-
-        // OPTIONAL METHODS
         // Override bar/separator color.
         setBarColor(getResources().getColor(R.color.dark_purple));
         setSeparatorColor(getResources().getColor(R.color.panel_background_main));
@@ -90,25 +59,4 @@ public class OnboardingActivity extends AppIntro {
     protected void attachBaseContext(Context base) {
         super.attachBaseContext(LocaleHelper.onAttach(base));
     }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) { //Saving the fragments
-        super.onSaveInstanceState(outState);
-
-        //Save the fragment's instance
-        int count = 0;
-        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
-            count++;
-        }
-
-        //Should check if the fragment exists in the fragment manager or else it'll flag error
-        if (count >= 1)
-            getSupportFragmentManager().putFragment(outState, BUNDLE_KEY_WELCOME_FRAGMENT, welcome);
-        if (count >= 2)
-            getSupportFragmentManager().putFragment(outState, BUNDLE_KEY_INTRO_2_FRAGMENT, intro2);
-        if (count >= 3)
-            getSupportFragmentManager().putFragment(outState, BUNDLE_KEY_CS2_FRAGMENT, cs2);
-        if (count >= 4 && PermissionManager.isLollipopOrHigher())
-            getSupportFragmentManager().putFragment(outState, BUNDLE_KEY_CS3_FRAGMENT, cs3);
-    }
 }
\ No newline at end of file





More information about the tor-commits mailing list