From 918f3b62b4ffb25e82888c31844514127aed55a8 Mon Sep 17 00:00:00 2001 From: johnyukon21 Date: Fri, 22 May 2020 09:55:46 -0700 Subject: [PATCH 1/8] adding a base activity to set the action bar consistently across the different screens --- .../abcore/ABCoreBaseActivity.java | 56 +++++++++++++++++++ .../greenaddress/abcore/AboutActivity.java | 13 ++--- .../greenaddress/abcore/ConsoleActivity.java | 8 +-- .../com/greenaddress/abcore/LogActivity.java | 6 +- .../com/greenaddress/abcore/MainActivity.java | 34 +---------- .../com/greenaddress/abcore/PeerActivity.java | 17 ++++-- app/src/main/res/layout/activity_peer.xml | 37 +++++++++++- app/src/main/res/layout/content_peer.xml | 40 ------------- app/src/main/res/menu/menu.xml | 2 + 9 files changed, 118 insertions(+), 95 deletions(-) create mode 100644 app/src/main/java/com/greenaddress/abcore/ABCoreBaseActivity.java delete mode 100755 app/src/main/res/layout/content_peer.xml diff --git a/app/src/main/java/com/greenaddress/abcore/ABCoreBaseActivity.java b/app/src/main/java/com/greenaddress/abcore/ABCoreBaseActivity.java new file mode 100644 index 00000000..b7e89db1 --- /dev/null +++ b/app/src/main/java/com/greenaddress/abcore/ABCoreBaseActivity.java @@ -0,0 +1,56 @@ +package com.greenaddress.abcore; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +public class ABCoreBaseActivity extends AppCompatActivity { + + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + final MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.main: + startActivity(new Intent(this, MainActivity.class)); + return true; + case R.id.configuration: + startActivity(new Intent(this, SettingsActivity.class)); + return true; + case R.id.peerview: + startActivity(new Intent(this, PeerActivity.class)); + return true; + case R.id.debug: + startActivity(new Intent(this, LogActivity.class)); + return true; + case R.id.console: + startActivity(new Intent(this, ConsoleActivity.class)); + return true; + case R.id.about: + startActivity(new Intent(this, AboutActivity.class)); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + protected void setUpTopNavBar(){ + final Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + final String useDistribution = prefs.getString("usedistribution", "core"); + getSupportActionBar().setSubtitle(getString(R.string.subtitle, useDistribution)); + } +} diff --git a/app/src/main/java/com/greenaddress/abcore/AboutActivity.java b/app/src/main/java/com/greenaddress/abcore/AboutActivity.java index c204d34f..fff2d13e 100755 --- a/app/src/main/java/com/greenaddress/abcore/AboutActivity.java +++ b/app/src/main/java/com/greenaddress/abcore/AboutActivity.java @@ -1,24 +1,23 @@ package com.greenaddress.abcore; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -public class AboutActivity extends AppCompatActivity { +public class AboutActivity extends ABCoreBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); - - final Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - final String useDistribution = prefs.getString("usedistribution", "core"); - getSupportActionBar().setSubtitle(getString(R.string.subtitle, useDistribution)); + setUpTopNavBar(); } diff --git a/app/src/main/java/com/greenaddress/abcore/ConsoleActivity.java b/app/src/main/java/com/greenaddress/abcore/ConsoleActivity.java index c2d1b303..efea7a30 100644 --- a/app/src/main/java/com/greenaddress/abcore/ConsoleActivity.java +++ b/app/src/main/java/com/greenaddress/abcore/ConsoleActivity.java @@ -17,7 +17,7 @@ import com.google.android.material.snackbar.Snackbar; -public class ConsoleActivity extends AppCompatActivity { +public class ConsoleActivity extends ABCoreBaseActivity { private RPCResponseReceiver rpcResponseReceiver; @@ -26,11 +26,7 @@ protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_console); - final Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - final String useDistribution = prefs.getString("usedistribution", "core"); - getSupportActionBar().setSubtitle(getString(R.string.subtitle, useDistribution)); + setUpTopNavBar(); final EditText console = findViewById(R.id.editText2); console.setOnEditorActionListener(new TextView.OnEditorActionListener() { diff --git a/app/src/main/java/com/greenaddress/abcore/LogActivity.java b/app/src/main/java/com/greenaddress/abcore/LogActivity.java index 83ec80be..1a997af9 100755 --- a/app/src/main/java/com/greenaddress/abcore/LogActivity.java +++ b/app/src/main/java/com/greenaddress/abcore/LogActivity.java @@ -15,7 +15,7 @@ import java.io.IOException; import java.io.RandomAccessFile; -public class LogActivity extends AppCompatActivity { +public class LogActivity extends ABCoreBaseActivity { private static final int LOOP_DELAY = 600; @@ -63,9 +63,7 @@ protected void onCreate(Bundle savedInstanceState) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); final String useDistribution = prefs.getString("usedistribution", "core"); - final Toolbar toolbar = findViewById(R.id.toolbar); - toolbar.setSubtitle(getString(R.string.subtitle, useDistribution)); - setSupportActionBar(toolbar); + setUpTopNavBar(); final String daemon = "liquid".equals(useDistribution) ? "/liquidv1/debug.log" : "/debug.log"; mLogFile = new File(Utils.getDataDir(this) + (Utils.isTestnet(this) ? "/testnet3/debug.log" : daemon)); diff --git a/app/src/main/java/com/greenaddress/abcore/MainActivity.java b/app/src/main/java/com/greenaddress/abcore/MainActivity.java index e4d9377a..11449127 100755 --- a/app/src/main/java/com/greenaddress/abcore/MainActivity.java +++ b/app/src/main/java/com/greenaddress/abcore/MainActivity.java @@ -34,7 +34,7 @@ import com.google.zxing.qrcode.encoder.Encoder; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends ABCoreBaseActivity { private final static String TAG = MainActivity.class.getName(); private RPCResponseReceiver mRpcResponseReceiver; private TextView mTvStatus; @@ -192,6 +192,7 @@ public void onResume() { final String useDistribution = prefs.getString("usedistribution", "core"); getSupportActionBar().setSubtitle(getString(R.string.subtitle, useDistribution)); + final TextView mTvDaemon = findViewById(R.id.textViewDaemon); final String daemonVersion = "knots".equals(useDistribution) ? Packages.BITCOIN_KNOTS_NDK : "liquid".equals(useDistribution) ? Packages.BITCOIN_LIQUID_NDK : Packages.BITCOIN_NDK; mTvDaemon.setText(getString(R.string.subtitle, useDistribution + " " + daemonVersion)); @@ -199,37 +200,6 @@ public void onResume() { mMsgHandler.postDelayed(runnableCode, 1000); } - @Override - public boolean onCreateOptionsMenu(final Menu menu) { - final MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - // Handle item selection - switch (item.getItemId()) { - case R.id.configuration: - startActivity(new Intent(this, SettingsActivity.class)); - return true; - case R.id.peerview: - startActivity(new Intent(this, PeerActivity.class)); - return true; - case R.id.debug: - startActivity(new Intent(this, LogActivity.class)); - return true; - case R.id.console: - startActivity(new Intent(this, ConsoleActivity.class)); - return true; - case R.id.about: - startActivity(new Intent(this, AboutActivity.class)); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - public class RPCResponseReceiver extends BroadcastReceiver { public static final String ACTION_RESP = "com.greenaddress.intent.action.RPC_PROCESSED"; diff --git a/app/src/main/java/com/greenaddress/abcore/PeerActivity.java b/app/src/main/java/com/greenaddress/abcore/PeerActivity.java index 1d1b0dc9..00193a60 100755 --- a/app/src/main/java/com/greenaddress/abcore/PeerActivity.java +++ b/app/src/main/java/com/greenaddress/abcore/PeerActivity.java @@ -6,18 +6,23 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; import android.view.View; import android.widget.ArrayAdapter; +import android.widget.ListView; import android.widget.ProgressBar; +import androidx.appcompat.widget.Toolbar; + import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import java.util.ArrayList; import java.util.List; -public class PeerActivity extends ListActivity { +public class PeerActivity extends ABCoreBaseActivity { private final List listItems = new ArrayList<>(); private ArrayAdapter adapter; @@ -27,12 +32,14 @@ public class PeerActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - adapter = new ArrayAdapter<>(this, - android.R.layout.simple_list_item_1, - listItems); + adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems); setContentView(R.layout.activity_peer); - setListAdapter(adapter); + ListView list=findViewById(R.id.listview); + list.setAdapter(adapter); + + setUpTopNavBar(); + final FloatingActionButton fab = findViewById(R.id.fab); fab.setVisibility(View.GONE); fab.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/res/layout/activity_peer.xml b/app/src/main/res/layout/activity_peer.xml index 63271f08..d7cdba78 100755 --- a/app/src/main/res/layout/activity_peer.xml +++ b/app/src/main/res/layout/activity_peer.xml @@ -22,7 +22,42 @@ - + + + + + + + + + + + + - - - - - - - - - - diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index b9f8903a..1085003c 100755 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -1,5 +1,7 @@ + Date: Fri, 22 May 2020 19:05:12 -0700 Subject: [PATCH 2/8] Changing the way the top nav bar is set to the settings pages also have it. Move about as a subsection within settings --- app/src/main/AndroidManifest.xml | 1 + .../abcore/ABCoreBaseActivity.java | 3 -- .../abcore/AppCompatPreferenceActivity.java | 2 +- .../abcore/BitcoinConfEditActivity.java | 2 +- .../greenaddress/abcore/DownloadActivity.java | 2 -- .../com/greenaddress/abcore/MainActivity.java | 2 -- .../greenaddress/abcore/SettingsActivity.java | 36 ++++++++----------- app/src/main/res/layout/activity_about.xml | 14 -------- app/src/main/res/layout/activity_console.xml | 16 --------- app/src/main/res/layout/activity_download.xml | 13 ------- app/src/main/res/layout/activity_main.xml | 14 -------- app/src/main/res/layout/activity_peer.xml | 13 ------- app/src/main/res/values/strings.xml | 15 ++++++-- app/src/main/res/values/styles.xml | 2 +- app/src/main/res/xml/pref_about.xml | 33 +++++++++++++++++ app/src/main/res/xml/pref_headers.xml | 10 ++++-- 16 files changed, 73 insertions(+), 105 deletions(-) create mode 100755 app/src/main/res/xml/pref_about.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 261e8c49..d791ef56 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -49,6 +49,7 @@ android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:noHistory="true"/> + for more information on developing a Settings UI. */ public class SettingsActivity extends AppCompatPreferenceActivity { + private final static String TAG = SettingsActivity.class.getName(); /** @@ -47,6 +48,7 @@ private static boolean isXLargeTablet(final Context context) { & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; } + private static void deleteRF(final File f) { Log.v(TAG, "Deleting " + f.getAbsolutePath() + "/" + f.getName()); @@ -58,6 +60,8 @@ private static void deleteRF(final File f) { f.delete(); } + + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -98,8 +102,9 @@ public void onBuildHeaders(final List
target) { */ protected boolean isValidFragment(final String fragmentName) { return PreferenceFragment.class.getName().equals(fragmentName) - || AndroidPreferenceFragment.class.getName().equals(fragmentName) - || CorePreferenceFragment.class.getName().equals(fragmentName); + || SettingsActivity.CorePreferenceFragment.class.getName().equals(fragmentName) + || SettingsActivity.AndroidPreferenceFragment.class.getName().equals(fragmentName) + || SettingsActivity.AboutFragment.class.getName().equals(fragmentName); } /** @@ -112,7 +117,6 @@ public static class CorePreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setHasOptionsMenu(true); final Properties p = new Properties(); try { @@ -192,16 +196,6 @@ public boolean onPreferenceChange(final Preference preference, final Object o) { } }); } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - final int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); - } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @@ -210,7 +204,6 @@ public static class AndroidPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setHasOptionsMenu(true); addPreferencesFromResource(R.xml.pref_android); findPreference("deletecore").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @@ -239,15 +232,16 @@ public boolean onPreferenceClick(final Preference preference) { } }); } + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class AboutFragment extends PreferenceFragment { @Override - public boolean onOptionsItemSelected(final MenuItem item) { - final int id = item.getItemId(); - if (id == android.R.id.home) { - startActivity(new Intent(getActivity(), SettingsActivity.class)); - return true; - } - return super.onOptionsItemSelected(item); + public void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_about); } + } } diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index bb35214e..40fe6d38 100755 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -8,20 +8,6 @@ android:fitsSystemWindows="true" tools:context="com.greenaddress.abcore.AboutActivity"> - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_download.xml b/app/src/main/res/layout/activity_download.xml index 46cb9f84..2d9d258f 100755 --- a/app/src/main/res/layout/activity_download.xml +++ b/app/src/main/res/layout/activity_download.xml @@ -8,19 +8,6 @@ android:fitsSystemWindows="true" tools:context="com.greenaddress.abcore.MainActivity"> - - - - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f0747c1a..8b5d35a2 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,20 +13,6 @@ android:orientation="vertical" tools:context="com.greenaddress.abcore.MainActivity"> - - - - - - diff --git a/app/src/main/res/layout/activity_peer.xml b/app/src/main/res/layout/activity_peer.xml index d7cdba78..192f7b8f 100755 --- a/app/src/main/res/layout/activity_peer.xml +++ b/app/src/main/res/layout/activity_peer.xml @@ -8,19 +8,6 @@ android:fitsSystemWindows="true" tools:context=".PeerActivity"> - - - - - Daemon: %1$s Status: %1$s Manually edit bitcoin.conf - Daemon Configuration + Daemon Settings Download Configuration - Extra Configuration + Application Settings Peers The app requires a fullnode daemon to function. Click on the button to start downloading and configuring the daemon Start download @@ -23,4 +23,15 @@ Switch ON Switch OFF Processed %1d%% (block height %2d) + Settings + About ABCore + ABCore is an Android app that makes it easy to run Bitcoin Core by acting as a wrapper. + Source Code + http://www.github.com/greenaddress/abcore + License + http://www.opensource.org/licenses/MIT + Version + Contributors + Development\n\tLawrence Nahum\n\ttwitter.com/LarryBitcoin\n\nIcon design\n\tOttavio Fontolan\n\totta88.box@gmail.com\n\nSpecial thanks to the Bitcoin Core Dev Team github.com/bitcoin + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 987e369f..b0e25cdc 100755 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,5 +1,5 @@ - diff --git a/app/src/main/res/xml/pref_download.xml b/app/src/main/res/xml/pref_download.xml deleted file mode 100755 index 6d410716..00000000 --- a/app/src/main/res/xml/pref_download.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/app/src/main/res/xml/pref_download_headers.xml b/app/src/main/res/xml/pref_download_headers.xml deleted file mode 100755 index c5f5429c..00000000 --- a/app/src/main/res/xml/pref_download_headers.xml +++ /dev/null @@ -1,8 +0,0 @@ - - -
- - From 046160578556d0768e58968bce2c7662ffc1db15 Mon Sep 17 00:00:00 2001 From: johnyukon21 Date: Sat, 23 May 2020 14:59:40 -0700 Subject: [PATCH 6/8] making the gitignore file catch all the .idea files --- .gitignore | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index a4990aec..e7c41ef6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,22 +11,4 @@ /app/build -.idea/.name - -.idea/compiler.xml - -.idea/copyright/profiles_settings.xml - -.idea/encodings.xml - -.idea/gradle.xml - -.idea/misc.xml - -.idea/modules.xml - -.idea/runConfigurations.xml - -.idea/vcs.xml - -.idea/caches/ +.idea From 2efe1b5008bd752137841934da9b91fd9faa7a29 Mon Sep 17 00:00:00 2001 From: johnyukon21 Date: Sat, 23 May 2020 15:16:16 -0700 Subject: [PATCH 7/8] reverting some unncessary changes --- app/src/main/res/xml/pref_headers.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml index d92568f7..e96b2fed 100755 --- a/app/src/main/res/xml/pref_headers.xml +++ b/app/src/main/res/xml/pref_headers.xml @@ -1,20 +1,18 @@ - -
+ android:title="@string/pref_header_conf"/>
+ android:title="@string/pref_header_android"/>
+ android:title="@string/pref_header_about"/> From 684371bec905b1558f80144bbfe1654c8de14957 Mon Sep 17 00:00:00 2001 From: johnyukon21 Date: Sat, 23 May 2020 18:08:38 -0700 Subject: [PATCH 8/8] fixing the build --- app/src/main/res/layout/activity_console.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - 4 files changed, 4 deletions(-) diff --git a/app/src/main/res/layout/activity_console.xml b/app/src/main/res/layout/activity_console.xml index 4a7dcf91..d28d5076 100644 --- a/app/src/main/res/layout/activity_console.xml +++ b/app/src/main/res/layout/activity_console.xml @@ -25,7 +25,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/editText2" - android:layout_below="@+id/bar_layout" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentEnd="true" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1edc2f1a..ed6369ad 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -5,7 +5,6 @@ Bitcoin Konfiguration Konfiguration herunterladen Bitcoin.conf manuell editieren - Download beginnen Kern auf OFF stellen Kern auf ON stellen Einstellungen herunterladen diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6a89f5c4..8dc27f39 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -7,7 +7,6 @@ Configuration Supplémentaire Peers L\'application nécessite Bitcoin pour fonctionner. Cliquez sur le bouton pour commencer à télécharger et à configurer Bitcoin - Télécharger Échec, voulez-vous réessayer? Veuillez patienter, récupération, déballage et configuration de Bitcoin… Activer diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 5ade78eb..4a2d3fa0 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -7,7 +7,6 @@ Configuratione aggiuntiva Nodi Questa app richiede Bitcoin per funzionare. Tocca il bottone per far partire lo scaricamento e la configurazione di Bitcoin - Fai partire il download Fallito, vuoi riprovare? Per piacere aspetta. Scaricamento e configurazione di Bitcoin … Porta Core ON