[tor-commits] [snowflake-mobile/master] Moved main activity code in to MainFragment to make way for up comming settings fragment

cohosh at torproject.org cohosh at torproject.org
Fri Jul 10 16:27:27 UTC 2020


commit ec410a4b728cc5a3a4038ba46c32a7c6d66615c9
Author: Hashik Donthineni <HashikDonthineni at gmail.com>
Date:   Sun Jun 28 15:14:20 2020 +0530

    Moved main activity code in to MainFragment to make way for up comming settings fragment
---
 app/build.gradle                                   |  1 +
 .../org/torproject/snowflake/MainActivity.java     | 20 ++-----
 .../org/torproject/snowflake/MainFragment.java     | 68 ++++++++++++++++++++++
 .../snowflake/interfaces/MainFragmentCallback.java |  6 ++
 app/src/main/res/layout/activity_main.xml          | 11 ----
 app/src/main/res/layout/fragment_main_fragment.xml | 17 ++++++
 app/src/main/res/values/strings.xml                |  2 +
 7 files changed, 99 insertions(+), 26 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 4d13970..964695b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,6 +33,7 @@ dependencies {
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation 'androidx.preference:preference:1.1.1'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
diff --git a/app/src/main/java/org/torproject/snowflake/MainActivity.java b/app/src/main/java/org/torproject/snowflake/MainActivity.java
index 1ac43dd..d412944 100644
--- a/app/src/main/java/org/torproject/snowflake/MainActivity.java
+++ b/app/src/main/java/org/torproject/snowflake/MainActivity.java
@@ -8,16 +8,16 @@ import android.content.SharedPreferences;
 import android.graphics.Color;
 import android.os.Build;
 import android.os.Bundle;
-import android.widget.Button;
 
 import androidx.appcompat.app.AppCompatActivity;
 
 import org.torproject.snowflake.constants.ForegroundServiceConstants;
+import org.torproject.snowflake.interfaces.MainFragmentCallback;
 
 /**
  * MainActivity is the main UI of the application.
  */
-public class MainActivity extends AppCompatActivity {
+public class MainActivity extends AppCompatActivity implements MainFragmentCallback {
     private static final String TAG = "MainActivity";
     private SharedPreferences sharedPreferences;
 
@@ -25,7 +25,7 @@ public class MainActivity extends AppCompatActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
-
+        setSupportActionBar(findViewById(R.id.toolbar));
         sharedPreferences = getSharedPreferences(getString(R.string.sharedpreference_file), MODE_PRIVATE);
 
         //Creating notification channel if app is being run for the first time
@@ -34,16 +34,6 @@ public class MainActivity extends AppCompatActivity {
             //Setting initial run to false.
             sharedPreferences.edit().putBoolean(getString(R.string.initial_run_boolean), false).apply();
         }
-
-        Button startButton = findViewById(R.id.start_button);
-        startButton.setOnClickListener(v -> {
-            if (isServiceRunning()) //Toggling the service.
-                serviceToggle(ForegroundServiceConstants.ACTION_STOP);
-            else
-                serviceToggle(ForegroundServiceConstants.ACTION_START);
-        });
-        if (BuildConfig.DEBUG)
-            startButton.performClick(); //To perform an automatic click in testing environment.
     }
 
     /**
@@ -51,7 +41,7 @@ public class MainActivity extends AppCompatActivity {
      *
      * @param action An Action from ForegroundServiceConstants.
      */
-    private void serviceToggle(String action) {
+    public void serviceToggle(String action) {
         Intent serviceIntent = new Intent(MainActivity.this, MyPersistentService.class);
         serviceIntent.setAction(action);
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -66,7 +56,7 @@ public class MainActivity extends AppCompatActivity {
      *
      * @return boolean whether the service is running or not.
      */
-    private boolean isServiceRunning() {
+    public boolean isServiceRunning() {
         return sharedPreferences.getBoolean(getString(R.string.is_service_running_bool), false);
     }
 
diff --git a/app/src/main/java/org/torproject/snowflake/MainFragment.java b/app/src/main/java/org/torproject/snowflake/MainFragment.java
new file mode 100644
index 0000000..f850277
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/MainFragment.java
@@ -0,0 +1,68 @@
+package org.torproject.snowflake;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+
+import org.torproject.snowflake.constants.ForegroundServiceConstants;
+import org.torproject.snowflake.interfaces.MainFragmentCallback;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link MainFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class MainFragment extends Fragment {
+    MainFragmentCallback callback;
+
+    public MainFragment() {
+        // Required empty public constructor
+    }
+
+    /**
+     * Use this factory method to create a new instance of
+     * this fragment.
+     *
+     * @return A new instance of fragment main_fragment.
+     */
+
+    public static MainFragment newInstance() {
+        MainFragment fragment = new MainFragment();
+        Bundle bundle = new Bundle();
+        return fragment;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        Button startButton = container.findViewById(R.id.start_button);
+        startButton.setOnClickListener(v -> {
+            if (callback.isServiceRunning()) //Toggling the service.
+                callback.serviceToggle(ForegroundServiceConstants.ACTION_STOP);
+            else
+                callback.serviceToggle(ForegroundServiceConstants.ACTION_START);
+        });
+        if (BuildConfig.DEBUG)
+            startButton.performClick(); //To perform an automatic click in testing environment.
+
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_main_fragment, container, false);
+    }
+
+    @Override
+    public void onAttach(@NonNull Context context) {
+        super.onAttach(context);
+        callback = (MainFragmentCallback) context;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java b/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java
new file mode 100644
index 0000000..08e2d99
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java
@@ -0,0 +1,6 @@
+package org.torproject.snowflake.interfaces;
+
+public interface MainFragmentCallback {
+    boolean isServiceRunning();
+    void serviceToggle(String action);
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 916b433..abc7268 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -38,15 +38,4 @@
                 android:foreground="?android:attr/selectableItemBackground" />
         </RelativeLayout>
     </androidx.appcompat.widget.Toolbar>
-
-    <Button
-        android:id="@+id/start_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:foreground="?android:attr/selectableItemBackground"
-        android:text="Service Toggle"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_main_fragment.xml b/app/src/main/res/layout/fragment_main_fragment.xml
new file mode 100644
index 0000000..7523126
--- /dev/null
+++ b/app/src/main/res/layout/fragment_main_fragment.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainFragment">
+
+
+    <Button
+        android:id="@+id/start_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"
+        android:foreground="?android:attr/selectableItemBackground"
+        android:text="Service Toggle" />
+
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d737520..c26d83e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,4 +5,6 @@
     <string name="not_channel_desc">This Channel should not be muted. The Android system will consider Snowflake not import and will kill the service if it\'s muted.</string>
     <string name="initial_run_boolean">initial_run</string>
     <string name="not_channel_name">Snowflake Service</string>
+    <!-- TODO: Remove or change this placeholder text -->
+    <string name="hello_blank_fragment">Hello blank fragment</string>
 </resources>





More information about the tor-commits mailing list