/* This file is part of the Diaspora Native WebApp. Diaspora Native WebApp is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Diaspora Native WebApp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the Diaspora Native WebApp. If not, see . */ package com.github.dfa.diaspora_android.activity; import android.annotation.TargetApi; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Build; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.SpannableString; import android.text.TextWatcher; import android.text.util.Linkify; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.CookieManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.R; import com.github.dfa.diaspora_android.task.GetPodsService; import com.github.dfa.diaspora_android.util.Helpers; import java.util.ArrayList; import java.util.Collections; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class PodSelectionActivity extends AppCompatActivity { private BroadcastReceiver podListReceiver; private App app; @BindView(R.id.podselection__edit_filter) public EditText filter; @BindView(R.id.podselection__listpods) public ListView lv; private String podSelected = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.podselection_activity); ButterKnife.bind(this); app = (App) getApplication(); lv.setTextFilterEnabled(true); podListReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.hasExtra("pods")) { Bundle extras = intent.getExtras(); String[] pods = extras.getStringArray("pods"); if (pods != null && pods.length > 0) updateListview(pods); else { Snackbar.make(lv, R.string.podlist_error, Snackbar.LENGTH_LONG).show(); } } } }; registerReceiver(podListReceiver, new IntentFilter(GetPodsService.MESSAGE)); if (!Helpers.isOnline(PodSelectionActivity.this)) { Snackbar.make(lv, R.string.no_internet, Snackbar.LENGTH_LONG).show(); } } @OnClick(R.id.podselection__button_select_pod) public void onButtonSelectPodClicked(View view) { if (filter.getText().length() > 4 && filter.getText().toString().contains("")) { askConfirmation(filter.getText().toString()); } else { Snackbar.make(lv, R.string.valid_pod, Snackbar.LENGTH_LONG).show(); } } @Override protected void onResume() { super.onResume(); Intent i = new Intent(PodSelectionActivity.this, GetPodsService.class); startService(i); } private void updateListview(String[] allPods) { final ArrayList podList = new ArrayList<>(); for (String pod : allPods) { podList.add(pod.toLowerCase()); } //Collections.sort(podList); final ArrayAdapter adapter = new ArrayAdapter<>( PodSelectionActivity.this, android.R.layout.simple_list_item_1, podList); lv.setAdapter(adapter); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { askConfirmation(((TextView) view).getText().toString()); } }); adapter.getFilter().filter(filter.getText()); filter.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { (adapter).getFilter().filter(s.toString()); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { } }); } private void askConfirmation(final String podDomain) { podSelected = podDomain; // Make link clickable final SpannableString dialogMessage = new SpannableString(getString(R.string.confirm_pod, podDomain)); Linkify.addLinks(dialogMessage, Linkify.ALL); if (Helpers.isOnline(PodSelectionActivity.this)) { new AlertDialog.Builder(PodSelectionActivity.this) .setTitle(getString(R.string.confirmation)) .setMessage(dialogMessage) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); onPodSelectionConfirmed(); } }) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { @TargetApi(11) public void onClick(DialogInterface dialog, int id) { dialog.cancel(); podSelected = ""; } }).show(); } else { Snackbar.make(lv, R.string.no_internet, Snackbar.LENGTH_LONG).show(); } } public void onPodSelectionConfirmed(){ app.getSettings().setPodDomain(podSelected); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { CookieManager.getInstance().removeAllCookies(null); CookieManager.getInstance().removeSessionCookies(null); } catch (Exception e) { e.printStackTrace(); } } else { try { CookieManager.getInstance().removeAllCookie(); CookieManager.getInstance().removeSessionCookie(); } catch (Exception e) { e.printStackTrace(); } } Intent intent = new Intent(PodSelectionActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(intent); overridePendingTransition(R.anim.fadein, R.anim.fadeout); finish(); } @Override public void onBackPressed() { Snackbar.make(lv, R.string.confirm_exit, Snackbar.LENGTH_LONG) .setAction(R.string.yes, new View.OnClickListener() { public void onClick(View view) { moveTaskToBack(true); } }) .show(); } @Override protected void onDestroy() { unregisterReceiver(podListReceiver); super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_pods, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_reload: { if (Helpers.isOnline(PodSelectionActivity.this)) { Intent i = new Intent(PodSelectionActivity.this, GetPodsService.class); startService(i); return true; } else { Snackbar.make(lv, R.string.no_internet, Snackbar.LENGTH_LONG).show(); return false; } } } return super.onOptionsItemSelected(item); } }