From a9281c1585aeebd5a02b6e794a457604db66da8a Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 27 Oct 2020 16:58:40 +0100 Subject: [PATCH] Add instances picker --- .../mobilizon/InstancePickerActivity.java | 51 ++++++++++-- .../app/fedilab/mobilizon/MainActivity.java | 12 +++ .../client/RetrofitInstancesAPI.java | 2 +- .../mobilizon/drawer/InstanceAdapter.java | 9 ++- .../app/fedilab/mobilizon/helper/Helper.java | 5 +- .../ic_baseline_calendar_today_24.xml | 5 ++ .../res/drawable/ic_baseline_group_24.xml | 13 +-- .../main/res/drawable/ic_baseline_info_24.xml | 13 +-- .../res/drawable/ic_baseline_people_24.xml | 5 ++ .../res/layout/activity_instance_picker.xml | 79 ++++++++----------- app/src/main/res/layout/drawer_instance.xml | 28 ++++++- app/src/main/res/menu/menu_instance.xml | 11 +++ app/src/main/res/values/strings.xml | 3 + 13 files changed, 156 insertions(+), 80 deletions(-) create mode 100644 app/src/main/res/drawable/ic_baseline_calendar_today_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_people_24.xml create mode 100644 app/src/main/res/menu/menu_instance.xml diff --git a/app/src/main/java/app/fedilab/mobilizon/InstancePickerActivity.java b/app/src/main/java/app/fedilab/mobilizon/InstancePickerActivity.java index 2375ab0..27f26fe 100644 --- a/app/src/main/java/app/fedilab/mobilizon/InstancePickerActivity.java +++ b/app/src/main/java/app/fedilab/mobilizon/InstancePickerActivity.java @@ -17,15 +17,16 @@ package app.fedilab.mobilizon; import android.os.Bundle; +import android.view.Menu; import android.view.MenuItem; import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SearchView; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; - import java.util.ArrayList; import java.util.List; @@ -47,8 +48,8 @@ public class InstancePickerActivity extends AppCompatActivity { private boolean flag_loading; private String max_id; private Search search; - private InstanceAdapter instanceAdapter; - + private InstanceAdapter instanceAdapter; + private SearchInstancesVM searchInstancesVM; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -66,15 +67,13 @@ public class InstancePickerActivity extends AppCompatActivity { search.setSort("-createdAt"); max_id = "0"; - setContentView(R.layout.activity_instance_picker); instances = new ArrayList<>(); binding.loader.setVisibility(View.VISIBLE); + binding.lvInstances.setVisibility(View.GONE); flag_loading = true; LinearLayoutManager mLayoutManager = new LinearLayoutManager(InstancePickerActivity.this); - - SearchInstancesVM searchInstancesVM = new ViewModelProvider(InstancePickerActivity.this).get(SearchInstancesVM.class); - + searchInstancesVM = new ViewModelProvider(InstancePickerActivity.this).get(SearchInstancesVM.class); instanceAdapter = new InstanceAdapter(instances); binding.lvInstances.setAdapter(instanceAdapter); binding.lvInstances.setLayoutManager(mLayoutManager); @@ -99,10 +98,45 @@ public class InstancePickerActivity extends AppCompatActivity { } }); + searchInstancesVM.get(search).observe(InstancePickerActivity.this, this::manageVIewInstance); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_instance, menu); + MenuItem myActionMenuItem = menu.findItem(R.id.action_search); + SearchView searchView = (SearchView) myActionMenuItem.getActionView(); + + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + max_id = "0"; + if( query != null && query.trim().length() > 0) { + search.setSearch(query.trim()); + }else{ + search.setSearch(null); + } + LinearLayoutManager mLayoutManager = new LinearLayoutManager(InstancePickerActivity.this); + instanceAdapter = new InstanceAdapter(instances); + binding.lvInstances.setAdapter(instanceAdapter); + binding.lvInstances.setLayoutManager(mLayoutManager); + search.setStart(max_id); + binding.loader.setVisibility(View.VISIBLE); + binding.lvInstances.setVisibility(View.GONE); + searchInstancesVM.get(search).observe(InstancePickerActivity.this, instanceData -> manageVIewInstance(instanceData)); + return false; + } + + @Override + public boolean onQueryTextChange(String s) { + return false; + } + }); + return true; + } + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { @@ -116,7 +150,8 @@ public class InstancePickerActivity extends AppCompatActivity { public void manageVIewInstance(InstanceData instanceData) { binding.loader.setVisibility(View.GONE); binding.loadingNextInstances.setVisibility(View.GONE); - if (instanceData == null || instanceData.data.size() == 0) { + flag_loading = false; + if (instanceData == null || (instanceData.data.size() == 0 && this.instances.size() == 0)) { binding.noAction.setVisibility(View.VISIBLE); binding.lvInstances.setVisibility(View.GONE); return; diff --git a/app/src/main/java/app/fedilab/mobilizon/MainActivity.java b/app/src/main/java/app/fedilab/mobilizon/MainActivity.java index ab9aa4a..27a8e71 100644 --- a/app/src/main/java/app/fedilab/mobilizon/MainActivity.java +++ b/app/src/main/java/app/fedilab/mobilizon/MainActivity.java @@ -162,6 +162,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On } + + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -376,9 +378,19 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On this.mFilePathCallback = mFilePathCallback; } + @SuppressLint("ApplySharedPref") @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) { + if (requestCode == PICK_INSTANCE && resultCode == Activity.RESULT_OK) { + if (data != null && data.getData() != null) { + final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.PREF_INSTANCE, String.valueOf(data.getData())); + editor.commit(); + recreate(); + } + } super.onActivityResult(requestCode, resultCode, data); return; } diff --git a/app/src/main/java/app/fedilab/mobilizon/client/RetrofitInstancesAPI.java b/app/src/main/java/app/fedilab/mobilizon/client/RetrofitInstancesAPI.java index 5556a4f..227fd94 100644 --- a/app/src/main/java/app/fedilab/mobilizon/client/RetrofitInstancesAPI.java +++ b/app/src/main/java/app/fedilab/mobilizon/client/RetrofitInstancesAPI.java @@ -29,7 +29,7 @@ public class RetrofitInstancesAPI { private InstancesService init() { Retrofit retrofit = new Retrofit.Builder() - .baseUrl("https://instances.joinmobilizon.org/api/v1") + .baseUrl("https://instances.joinmobilizon.org/api/v1/") .addConverterFactory(GsonConverterFactory.create()) .build(); return retrofit.create(InstancesService.class); diff --git a/app/src/main/java/app/fedilab/mobilizon/drawer/InstanceAdapter.java b/app/src/main/java/app/fedilab/mobilizon/drawer/InstanceAdapter.java index 2dd3a52..e2e900d 100644 --- a/app/src/main/java/app/fedilab/mobilizon/drawer/InstanceAdapter.java +++ b/app/src/main/java/app/fedilab/mobilizon/drawer/InstanceAdapter.java @@ -73,7 +73,7 @@ public class InstanceAdapter extends RecyclerView.Adapter 0) { @@ -88,6 +88,9 @@ public class InstanceAdapter extends RecyclerView.Adapter { @@ -114,7 +117,7 @@ public class InstanceAdapter extends RecyclerView.Adapter. */ public class Helper { - @SuppressWarnings("unused") public static final String TAG = "mobilizon_app"; public static final String APP_PREFS = "app_prefs"; public static final String PREF_INSTANCE = "instance"; @@ -42,7 +41,7 @@ public class Helper { */ public static String getLiveInstance(Context context) { final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - return sharedpreferences.getString(Helper.PREF_INSTANCE, "test.mobilizon.org"); + return sharedpreferences.getString(Helper.PREF_INSTANCE, "mobilizon.fr"); } /** @@ -82,7 +81,7 @@ public class Helper { } - @SuppressWarnings({"ResultOfMethodCallIgnored", "unused"}) + @SuppressWarnings({"ResultOfMethodCallIgnored"}) public static void injectCSS(Activity activity, WebView view, String cssFile) { try { InputStream inputStream = activity.getAssets().open(cssFile); diff --git a/app/src/main/res/drawable/ic_baseline_calendar_today_24.xml b/app/src/main/res/drawable/ic_baseline_calendar_today_24.xml new file mode 100644 index 0000000..fecae90 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_calendar_today_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_group_24.xml b/app/src/main/res/drawable/ic_baseline_group_24.xml index 2989eb6..cb57ddd 100644 --- a/app/src/main/res/drawable/ic_baseline_group_24.xml +++ b/app/src/main/res/drawable/ic_baseline_group_24.xml @@ -1,10 +1,5 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_info_24.xml b/app/src/main/res/drawable/ic_baseline_info_24.xml index 17255b7..4a664d9 100644 --- a/app/src/main/res/drawable/ic_baseline_info_24.xml +++ b/app/src/main/res/drawable/ic_baseline_info_24.xml @@ -1,10 +1,5 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_people_24.xml b/app/src/main/res/drawable/ic_baseline_people_24.xml new file mode 100644 index 0000000..cb57ddd --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_people_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_instance_picker.xml b/app/src/main/res/layout/activity_instance_picker.xml index 715d7a0..7612c69 100644 --- a/app/src/main/res/layout/activity_instance_picker.xml +++ b/app/src/main/res/layout/activity_instance_picker.xml @@ -15,7 +15,8 @@ You should have received a copy of the GNU General Public License along with Mobilizon app; if not, see . --> - + android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent" + android:layout_marginTop="10dp" + android:scrollbars="none" /> - - - + app:layout_constraintTop_toTopOf="parent"> - - - + - - - - - - + android:layout_height="match_parent" + android:layout_gravity="center" + android:gravity="center" + android:padding="10dp" + android:text="@string/no_results" + android:textSize="25sp" /> + + @@ -69,10 +71,32 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:drawablePadding="10dp" - app:drawableStartCompat="@drawable/ic_baseline_group_24" + app:drawableStartCompat="@drawable/ic_baseline_calendar_today_24" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/version" /> + + + + + + + app:layout_constraintTop_toBottomOf="@+id/users" /> diff --git a/app/src/main/res/menu/menu_instance.xml b/app/src/main/res/menu/menu_instance.xml new file mode 100644 index 0000000..aee5c50 --- /dev/null +++ b/app/src/main/res/menu/menu_instance.xml @@ -0,0 +1,11 @@ + + + \ 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 86dd22a..b0685d6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,4 +44,7 @@ Instances picker Pick this instance Local events: %1$s + Version: %1$s + Groups: %1$s + Users: %1$s \ No newline at end of file