Blame client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HomeActivity.java

Packit Service fa4841
/*
Packit Service fa4841
   Main/Home Activity
Packit Service fa4841
Packit Service fa4841
   Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
Packit Service fa4841
Packit Service fa4841
   This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit Service fa4841
   If a copy of the MPL was not distributed with this file, You can obtain one at
Packit Service fa4841
   http://mozilla.org/MPL/2.0/.
Packit Service fa4841
*/
Packit Service fa4841
Packit Service fa4841
package com.freerdp.freerdpcore.presentation;
Packit Service fa4841
Packit Service fa4841
import android.app.AlertDialog;
Packit Service fa4841
import android.content.DialogInterface;
Packit Service fa4841
import android.content.Intent;
Packit Service fa4841
import android.content.res.Configuration;
Packit Service fa4841
import android.net.Uri;
Packit Service fa4841
import android.os.Bundle;
Packit Service fa4841
import android.support.v7.app.AppCompatActivity;
Packit Service fa4841
import android.text.Editable;
Packit Service fa4841
import android.text.TextWatcher;
Packit Service fa4841
import android.util.Log;
Packit Service fa4841
import android.view.ContextMenu;
Packit Service fa4841
import android.view.ContextMenu.ContextMenuInfo;
Packit Service fa4841
import android.view.Menu;
Packit Service fa4841
import android.view.MenuInflater;
Packit Service fa4841
import android.view.MenuItem;
Packit Service fa4841
import android.view.View;
Packit Service fa4841
import android.view.View.OnClickListener;
Packit Service fa4841
import android.view.View.OnCreateContextMenuListener;
Packit Service fa4841
import android.widget.AdapterView;
Packit Service fa4841
import android.widget.AdapterView.AdapterContextMenuInfo;
Packit Service fa4841
import android.widget.Button;
Packit Service fa4841
import android.widget.CheckBox;
Packit Service fa4841
import android.widget.EditText;
Packit Service fa4841
import android.widget.ListView;
Packit Service fa4841
Packit Service fa4841
import com.freerdp.freerdpcore.R;
Packit Service fa4841
import com.freerdp.freerdpcore.application.GlobalApp;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.BookmarkBase;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.ConnectionReference;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.PlaceholderBookmark;
Packit Service fa4841
import com.freerdp.freerdpcore.domain.QuickConnectBookmark;
Packit Service fa4841
import com.freerdp.freerdpcore.utils.BookmarkArrayAdapter;
Packit Service fa4841
import com.freerdp.freerdpcore.utils.SeparatedListAdapter;
Packit Service fa4841
Packit Service fa4841
import java.util.ArrayList;
Packit Service fa4841
Packit Service fa4841
public class HomeActivity extends AppCompatActivity
Packit Service fa4841
{
Packit Service fa4841
	private final static String ADD_BOOKMARK_PLACEHOLDER = "add_bookmark";
Packit Service fa4841
	private static final String TAG = "HomeActivity";
Packit Service fa4841
	private static final String PARAM_SUPERBAR_TEXT = "superbar_text";
Packit Service fa4841
	private ListView listViewBookmarks;
Packit Service fa4841
	private Button clearTextButton;
Packit Service fa4841
	private EditText superBarEditText;
Packit Service fa4841
	private BookmarkArrayAdapter manualBookmarkAdapter;
Packit Service fa4841
	private SeparatedListAdapter separatedListAdapter;
Packit Service fa4841
	private PlaceholderBookmark addBookmarkPlaceholder;
Packit Service fa4841
	private String sectionLabelBookmarks;
Packit Service fa4841
Packit Service fa4841
	View mDecor;
Packit Service fa4841
Packit Service fa4841
	@Override public void onCreate(Bundle savedInstanceState)
Packit Service fa4841
	{
Packit Service fa4841
		setTitle(R.string.title_home);
Packit Service fa4841
		super.onCreate(savedInstanceState);
Packit Service fa4841
		setContentView(R.layout.home);
Packit Service fa4841
Packit Service fa4841
		mDecor = getWindow().getDecorView();
Packit Service fa4841
		mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
Packit Service fa4841
		                             View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Packit Service fa4841
Packit Service fa4841
		long heapSize = Runtime.getRuntime().maxMemory();
Packit Service fa4841
		Log.i(TAG, "Max HeapSize: " + heapSize);
Packit Service fa4841
		Log.i(TAG, "App data folder: " + getFilesDir().toString());
Packit Service fa4841
Packit Service fa4841
		// load strings
Packit Service fa4841
		sectionLabelBookmarks = getResources().getString(R.string.section_bookmarks);
Packit Service fa4841
Packit Service fa4841
		// create add bookmark/quick connect bookmark placeholder
Packit Service fa4841
		addBookmarkPlaceholder = new PlaceholderBookmark();
Packit Service fa4841
		addBookmarkPlaceholder.setName(ADD_BOOKMARK_PLACEHOLDER);
Packit Service fa4841
		addBookmarkPlaceholder.setLabel(
Packit Service fa4841
		    getResources().getString(R.string.list_placeholder_add_bookmark));
Packit Service fa4841
Packit Service fa4841
		// check for passed .rdp file and open it in a new bookmark
Packit Service fa4841
		Intent caller = getIntent();
Packit Service fa4841
		Uri callParameter = caller.getData();
Packit Service fa4841
Packit Service fa4841
		if (Intent.ACTION_VIEW.equals(caller.getAction()) && callParameter != null)
Packit Service fa4841
		{
Packit Service fa4841
			String refStr = ConnectionReference.getFileReference(callParameter.getPath());
Packit Service fa4841
			Bundle bundle = new Bundle();
Packit Service fa4841
			bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit Service fa4841
Packit Service fa4841
			Intent bookmarkIntent =
Packit Service fa4841
			    new Intent(this.getApplicationContext(), BookmarkActivity.class);
Packit Service fa4841
			bookmarkIntent.putExtras(bundle);
Packit Service fa4841
			startActivity(bookmarkIntent);
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		// load views
Packit Service fa4841
		clearTextButton = (Button)findViewById(R.id.clear_search_btn);
Packit Service fa4841
		superBarEditText = (EditText)findViewById(R.id.superBarEditText);
Packit Service fa4841
Packit Service fa4841
		listViewBookmarks = (ListView)findViewById(R.id.listViewBookmarks);
Packit Service fa4841
Packit Service fa4841
		// set listeners for the list view
Packit Service fa4841
		listViewBookmarks.setOnItemClickListener(new AdapterView.OnItemClickListener() {
Packit Service fa4841
			public void onItemClick(AdapterView parent, View view, int position, long id)
Packit Service fa4841
			{
Packit Service fa4841
				String curSection = separatedListAdapter.getSectionForPosition(position);
Packit Service fa4841
				Log.v(TAG, "Clicked on item id " + separatedListAdapter.getItemId(position) +
Packit Service fa4841
				               " in section " + curSection);
Packit Service fa4841
				if (curSection.equals(sectionLabelBookmarks))
Packit Service fa4841
				{
Packit Service fa4841
					String refStr = view.getTag().toString();
Packit Service fa4841
					if (ConnectionReference.isManualBookmarkReference(refStr) ||
Packit Service fa4841
					    ConnectionReference.isHostnameReference(refStr))
Packit Service fa4841
					{
Packit Service fa4841
						Bundle bundle = new Bundle();
Packit Service fa4841
						bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit Service fa4841
Packit Service fa4841
						Intent sessionIntent = new Intent(view.getContext(), SessionActivity.class);
Packit Service fa4841
						sessionIntent.putExtras(bundle);
Packit Service fa4841
						startActivity(sessionIntent);
Packit Service fa4841
Packit Service fa4841
						// clear any search text
Packit Service fa4841
						superBarEditText.setText("");
Packit Service fa4841
						superBarEditText.clearFocus();
Packit Service fa4841
					}
Packit Service fa4841
					else if (ConnectionReference.isPlaceholderReference(refStr))
Packit Service fa4841
					{
Packit Service fa4841
						// is this the add bookmark placeholder?
Packit Service fa4841
						if (ConnectionReference.getPlaceholder(refStr).equals(
Packit Service fa4841
						        ADD_BOOKMARK_PLACEHOLDER))
Packit Service fa4841
						{
Packit Service fa4841
							Intent bookmarkIntent =
Packit Service fa4841
							    new Intent(view.getContext(), BookmarkActivity.class);
Packit Service fa4841
							startActivity(bookmarkIntent);
Packit Service fa4841
						}
Packit Service fa4841
					}
Packit Service fa4841
				}
Packit Service fa4841
			}
Packit Service fa4841
		});
Packit Service fa4841
Packit Service fa4841
		listViewBookmarks.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
Packit Service fa4841
			@Override
Packit Service fa4841
			public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
Packit Service fa4841
			{
Packit Service fa4841
				// if the selected item is not a session item (tag == null) and not a quick connect
Packit Service fa4841
				// entry (not a hostname connection reference) inflate the context menu
Packit Service fa4841
				View itemView = ((AdapterContextMenuInfo)menuInfo).targetView;
Packit Service fa4841
				String refStr = itemView.getTag() != null ? itemView.getTag().toString() : null;
Packit Service fa4841
				if (refStr != null && !ConnectionReference.isHostnameReference(refStr) &&
Packit Service fa4841
				    !ConnectionReference.isPlaceholderReference(refStr))
Packit Service fa4841
				{
Packit Service fa4841
					getMenuInflater().inflate(R.menu.bookmark_context_menu, menu);
Packit Service fa4841
					menu.setHeaderTitle(getResources().getString(R.string.menu_title_bookmark));
Packit Service fa4841
				}
Packit Service fa4841
			}
Packit Service fa4841
		});
Packit Service fa4841
Packit Service fa4841
		superBarEditText.addTextChangedListener(new SuperBarTextWatcher());
Packit Service fa4841
Packit Service fa4841
		clearTextButton.setOnClickListener(new OnClickListener() {
Packit Service fa4841
			@Override public void onClick(View v)
Packit Service fa4841
			{
Packit Service fa4841
				superBarEditText.setText("");
Packit Service fa4841
			}
Packit Service fa4841
		});
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public void onConfigurationChanged(Configuration newConfig)
Packit Service fa4841
	{
Packit Service fa4841
		// ignore orientation/keyboard change
Packit Service fa4841
		super.onConfigurationChanged(newConfig);
Packit Service fa4841
		mDecor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
Packit Service fa4841
		                             View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public boolean onSearchRequested()
Packit Service fa4841
	{
Packit Service fa4841
		superBarEditText.requestFocus();
Packit Service fa4841
		return true;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public boolean onContextItemSelected(MenuItem aItem)
Packit Service fa4841
	{
Packit Service fa4841
Packit Service fa4841
		// get connection reference
Packit Service fa4841
		AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)aItem.getMenuInfo();
Packit Service fa4841
		String refStr = menuInfo.targetView.getTag().toString();
Packit Service fa4841
Packit Service fa4841
		// refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case
Packit Service fa4841
		// here ..
Packit Service fa4841
		int itemId = aItem.getItemId();
Packit Service fa4841
		if (itemId == R.id.bookmark_connect)
Packit Service fa4841
		{
Packit Service fa4841
			Bundle bundle = new Bundle();
Packit Service fa4841
			bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit Service fa4841
			Intent sessionIntent = new Intent(this, SessionActivity.class);
Packit Service fa4841
			sessionIntent.putExtras(bundle);
Packit Service fa4841
Packit Service fa4841
			startActivity(sessionIntent);
Packit Service fa4841
			return true;
Packit Service fa4841
		}
Packit Service fa4841
		else if (itemId == R.id.bookmark_edit)
Packit Service fa4841
		{
Packit Service fa4841
			Bundle bundle = new Bundle();
Packit Service fa4841
			bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
Packit Service fa4841
Packit Service fa4841
			Intent bookmarkIntent =
Packit Service fa4841
			    new Intent(this.getApplicationContext(), BookmarkActivity.class);
Packit Service fa4841
			bookmarkIntent.putExtras(bundle);
Packit Service fa4841
			startActivity(bookmarkIntent);
Packit Service fa4841
			return true;
Packit Service fa4841
		}
Packit Service fa4841
		else if (itemId == R.id.bookmark_delete)
Packit Service fa4841
		{
Packit Service fa4841
			if (ConnectionReference.isManualBookmarkReference(refStr))
Packit Service fa4841
			{
Packit Service fa4841
				long id = ConnectionReference.getManualBookmarkId(refStr);
Packit Service fa4841
				GlobalApp.getManualBookmarkGateway().delete(id);
Packit Service fa4841
				manualBookmarkAdapter.remove(id);
Packit Service fa4841
				separatedListAdapter.notifyDataSetChanged();
Packit Service fa4841
			}
Packit Service fa4841
			else
Packit Service fa4841
			{
Packit Service fa4841
				assert false;
Packit Service fa4841
			}
Packit Service fa4841
Packit Service fa4841
			// clear super bar text
Packit Service fa4841
			superBarEditText.setText("");
Packit Service fa4841
			return true;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		return false;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override protected void onResume()
Packit Service fa4841
	{
Packit Service fa4841
		super.onResume();
Packit Service fa4841
		Log.v(TAG, "HomeActivity.onResume");
Packit Service fa4841
Packit Service fa4841
		// create bookmark cursor adapter
Packit Service fa4841
		manualBookmarkAdapter = new BookmarkArrayAdapter(
Packit Service fa4841
		    this, R.layout.bookmark_list_item, GlobalApp.getManualBookmarkGateway().findAll());
Packit Service fa4841
Packit Service fa4841
		// add add bookmark item to manual adapter
Packit Service fa4841
		manualBookmarkAdapter.insert(addBookmarkPlaceholder, 0);
Packit Service fa4841
Packit Service fa4841
		// attach all adapters to the separatedListView adapter and assign it to the list view
Packit Service fa4841
		separatedListAdapter = new SeparatedListAdapter(this);
Packit Service fa4841
		separatedListAdapter.addSection(sectionLabelBookmarks, manualBookmarkAdapter);
Packit Service fa4841
		listViewBookmarks.setAdapter(separatedListAdapter);
Packit Service fa4841
Packit Service fa4841
		// if we have a filter text entered cause an update to be caused here
Packit Service fa4841
		String filter = superBarEditText.getText().toString();
Packit Service fa4841
		if (filter.length() > 0)
Packit Service fa4841
			superBarEditText.setText(filter);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override protected void onPause()
Packit Service fa4841
	{
Packit Service fa4841
		super.onPause();
Packit Service fa4841
		Log.v(TAG, "HomeActivity.onPause");
Packit Service fa4841
Packit Service fa4841
		// reset adapters
Packit Service fa4841
		listViewBookmarks.setAdapter(null);
Packit Service fa4841
		separatedListAdapter = null;
Packit Service fa4841
		manualBookmarkAdapter = null;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public void onBackPressed()
Packit Service fa4841
	{
Packit Service fa4841
		// if back was pressed - ask the user if he really wants to exit
Packit Service fa4841
		if (ApplicationSettingsActivity.getAskOnExit(this))
Packit Service fa4841
		{
Packit Service fa4841
			final CheckBox cb = new CheckBox(this);
Packit Service fa4841
			cb.setChecked(!ApplicationSettingsActivity.getAskOnExit(this));
Packit Service fa4841
			cb.setText(R.string.dlg_dont_show_again);
Packit Service fa4841
Packit Service fa4841
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
Packit Service fa4841
			builder.setTitle(R.string.dlg_title_exit)
Packit Service fa4841
			    .setMessage(R.string.dlg_msg_exit)
Packit Service fa4841
			    .setView(cb)
Packit Service fa4841
			    .setPositiveButton(R.string.yes,
Packit Service fa4841
			                       new DialogInterface.OnClickListener() {
Packit Service fa4841
				                       public void onClick(DialogInterface dialog, int which)
Packit Service fa4841
				                       {
Packit Service fa4841
					                       finish();
Packit Service fa4841
				                       }
Packit Service fa4841
			                       })
Packit Service fa4841
			    .setNegativeButton(R.string.no,
Packit Service fa4841
			                       new DialogInterface.OnClickListener() {
Packit Service fa4841
				                       public void onClick(DialogInterface dialog, int which)
Packit Service fa4841
				                       {
Packit Service fa4841
					                       dialog.dismiss();
Packit Service fa4841
				                       }
Packit Service fa4841
			                       })
Packit Service fa4841
			    .create()
Packit Service fa4841
			    .show();
Packit Service fa4841
		}
Packit Service fa4841
		else
Packit Service fa4841
		{
Packit Service fa4841
			super.onBackPressed();
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override protected void onSaveInstanceState(Bundle outState)
Packit Service fa4841
	{
Packit Service fa4841
		super.onSaveInstanceState(outState);
Packit Service fa4841
		outState.putString(PARAM_SUPERBAR_TEXT, superBarEditText.getText().toString());
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override protected void onRestoreInstanceState(Bundle inState)
Packit Service fa4841
	{
Packit Service fa4841
		super.onRestoreInstanceState(inState);
Packit Service fa4841
		superBarEditText.setText(inState.getString(PARAM_SUPERBAR_TEXT));
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public boolean onCreateOptionsMenu(Menu menu)
Packit Service fa4841
	{
Packit Service fa4841
		MenuInflater inflater = getMenuInflater();
Packit Service fa4841
		inflater.inflate(R.menu.home_menu, menu);
Packit Service fa4841
		return true;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public boolean onOptionsItemSelected(MenuItem item)
Packit Service fa4841
	{
Packit Service fa4841
Packit Service fa4841
		// refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case
Packit Service fa4841
		// here ..
Packit Service fa4841
		int itemId = item.getItemId();
Packit Service fa4841
		if (itemId == R.id.newBookmark)
Packit Service fa4841
		{
Packit Service fa4841
			Intent bookmarkIntent = new Intent(this, BookmarkActivity.class);
Packit Service fa4841
			startActivity(bookmarkIntent);
Packit Service fa4841
		}
Packit Service fa4841
		else if (itemId == R.id.appSettings)
Packit Service fa4841
		{
Packit Service fa4841
			Intent settingsIntent = new Intent(this, ApplicationSettingsActivity.class);
Packit Service fa4841
			startActivity(settingsIntent);
Packit Service fa4841
		}
Packit Service fa4841
		else if (itemId == R.id.help)
Packit Service fa4841
		{
Packit Service fa4841
			Intent helpIntent = new Intent(this, HelpActivity.class);
Packit Service fa4841
			startActivity(helpIntent);
Packit Service fa4841
		}
Packit Service fa4841
		else if (itemId == R.id.about)
Packit Service fa4841
		{
Packit Service fa4841
			Intent aboutIntent = new Intent(this, AboutActivity.class);
Packit Service fa4841
			startActivity(aboutIntent);
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		return true;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private class SuperBarTextWatcher implements TextWatcher
Packit Service fa4841
	{
Packit Service fa4841
		@Override public void afterTextChanged(Editable s)
Packit Service fa4841
		{
Packit Service fa4841
			if (separatedListAdapter != null)
Packit Service fa4841
			{
Packit Service fa4841
				String text = s.toString();
Packit Service fa4841
				if (text.length() > 0)
Packit Service fa4841
				{
Packit Service fa4841
					ArrayList<BookmarkBase> computers_list =
Packit Service fa4841
					    GlobalApp.getQuickConnectHistoryGateway().findHistory(text);
Packit Service fa4841
					computers_list.addAll(
Packit Service fa4841
					    GlobalApp.getManualBookmarkGateway().findByLabelOrHostnameLike(text));
Packit Service fa4841
					manualBookmarkAdapter.replaceItems(computers_list);
Packit Service fa4841
					QuickConnectBookmark qcBm = new QuickConnectBookmark();
Packit Service fa4841
					qcBm.setLabel(text);
Packit Service fa4841
					qcBm.setHostname(text);
Packit Service fa4841
					manualBookmarkAdapter.insert(qcBm, 0);
Packit Service fa4841
				}
Packit Service fa4841
				else
Packit Service fa4841
				{
Packit Service fa4841
					manualBookmarkAdapter.replaceItems(
Packit Service fa4841
					    GlobalApp.getManualBookmarkGateway().findAll());
Packit Service fa4841
					manualBookmarkAdapter.insert(addBookmarkPlaceholder, 0);
Packit Service fa4841
				}
Packit Service fa4841
Packit Service fa4841
				separatedListAdapter.notifyDataSetChanged();
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		@Override public void beforeTextChanged(CharSequence s, int start, int count, int after)
Packit Service fa4841
		{
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		@Override public void onTextChanged(CharSequence s, int start, int before, int count)
Packit Service fa4841
		{
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
}