entries can be moved to other groups
This commit is contained in:
		@@ -52,6 +52,7 @@
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="database\CheckDatabaseForChanges.cs" />
 | 
			
		||||
    <Compile Include="database\edit\MoveElement.cs" />
 | 
			
		||||
    <Compile Include="database\SynchronizeCachedDatabase.cs" />
 | 
			
		||||
    <Compile Include="Io\BuiltInFileStorage.cs" />
 | 
			
		||||
    <Compile Include="Io\CachingFileStorage.cs" />
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								src/Kp2aBusinessLogic/database/edit/MoveElement.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/Kp2aBusinessLogic/database/edit/MoveElement.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using Android.Content;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using KeePassLib.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace keepass2android.database.edit
 | 
			
		||||
{
 | 
			
		||||
	public class MoveElement: RunnableOnFinish
 | 
			
		||||
	{
 | 
			
		||||
		private readonly IStructureItem _elementToMove;
 | 
			
		||||
		private readonly PwGroup _targetGroup;
 | 
			
		||||
		private readonly Context _ctx;
 | 
			
		||||
		private readonly IKp2aApp _app;
 | 
			
		||||
 | 
			
		||||
		public MoveElement(IStructureItem elementToMove, PwGroup targetGroup, Context ctx, IKp2aApp app, OnFinish finish) : base(finish)
 | 
			
		||||
		{
 | 
			
		||||
			_elementToMove = elementToMove;
 | 
			
		||||
			_targetGroup = targetGroup;
 | 
			
		||||
			_ctx = ctx;
 | 
			
		||||
			_app = app;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override void Run()
 | 
			
		||||
		{
 | 
			
		||||
			
 | 
			
		||||
			_app.GetDb().Dirty.Add(_elementToMove.ParentGroup);
 | 
			
		||||
 | 
			
		||||
			PwGroup pgParent = _elementToMove.ParentGroup;
 | 
			
		||||
			if (pgParent != _targetGroup)
 | 
			
		||||
			{
 | 
			
		||||
				if (pgParent != null) // Remove from parent
 | 
			
		||||
				{
 | 
			
		||||
					PwEntry entry = _elementToMove as PwEntry;
 | 
			
		||||
					if (entry != null)
 | 
			
		||||
					{
 | 
			
		||||
						pgParent.Entries.Remove(entry);
 | 
			
		||||
						_targetGroup.AddEntry(entry, true, true);
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						PwGroup group = (PwGroup)_elementToMove;
 | 
			
		||||
						pgParent.Groups.Remove(group);
 | 
			
		||||
						_targetGroup.AddGroup(group, true, true);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			_onFinishToRun = new ActionOnFinish((success, message) =>
 | 
			
		||||
			{
 | 
			
		||||
				if (!success)
 | 
			
		||||
				{	// Let's not bother recovering from a failure.
 | 
			
		||||
					_app.LockDatabase(false);
 | 
			
		||||
				}
 | 
			
		||||
			}, OnFinishToRun);
 | 
			
		||||
 | 
			
		||||
			// Save
 | 
			
		||||
			SaveDb save = new SaveDb(_ctx, _app, OnFinishToRun, false);
 | 
			
		||||
			save.SetStatusLogger(StatusLogger);
 | 
			
		||||
			save.Run();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -35,8 +35,8 @@ namespace keepass2android
 | 
			
		||||
		
 | 
			
		||||
		public const int Uninit = -1;
 | 
			
		||||
		
 | 
			
		||||
		protected bool AddGroupEnabled = false;
 | 
			
		||||
		protected bool AddEntryEnabled = false;
 | 
			
		||||
		protected bool AddGroupEnabled = true;
 | 
			
		||||
		protected bool AddEntryEnabled = true;
 | 
			
		||||
		
 | 
			
		||||
		private const String Tag = "Group Activity:";
 | 
			
		||||
		
 | 
			
		||||
@@ -75,12 +75,14 @@ namespace keepass2android
 | 
			
		||||
			return new PwUuid(MemUtil.HexStringToByteArray(uuid));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected void SetupButtons()
 | 
			
		||||
		public override void SetupNormalButtons()
 | 
			
		||||
		{
 | 
			
		||||
			AddGroupEnabled = true;
 | 
			
		||||
			AddEntryEnabled = true;
 | 
			
		||||
			GroupView.SetNormalButtonVisibility(AddGroupEnabled, AddEntryEnabled);
 | 
			
		||||
			GroupView.Invalidate();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		protected override void OnCreate (Bundle savedInstanceState)
 | 
			
		||||
		{
 | 
			
		||||
			base.OnCreate (savedInstanceState);
 | 
			
		||||
@@ -109,12 +111,6 @@ namespace keepass2android
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			SetupButtons ();
 | 
			
		||||
 | 
			
		||||
			GroupView groupView = new GroupView(this);
 | 
			
		||||
			
 | 
			
		||||
			SetContentView (groupView);
 | 
			
		||||
			groupView.SetNormalButtonVisibility(AddGroupEnabled, AddEntryEnabled);
 | 
			
		||||
			
 | 
			
		||||
			if (AddGroupEnabled) {
 | 
			
		||||
				// Add Group button
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,10 @@ using Android.Views;
 | 
			
		||||
using Android.Widget;
 | 
			
		||||
using KeePassLib;
 | 
			
		||||
using Android.Preferences;
 | 
			
		||||
using KeePassLib.Interfaces;
 | 
			
		||||
using KeePassLib.Utility;
 | 
			
		||||
using keepass2android.Io;
 | 
			
		||||
using keepass2android.database.edit;
 | 
			
		||||
using keepass2android.view;
 | 
			
		||||
using Android.Graphics.Drawables;
 | 
			
		||||
 | 
			
		||||
@@ -57,14 +60,20 @@ namespace keepass2android
 | 
			
		||||
			AppTask.ToBundle(outState);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public virtual void SetupNormalButtons()
 | 
			
		||||
		{
 | 
			
		||||
			GroupView.SetNormalButtonVisibility(true, true);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
 | 
			
		||||
		{
 | 
			
		||||
			base.OnActivityResult(requestCode, resultCode, data);
 | 
			
		||||
 | 
			
		||||
			AppTask.TryGetFromActivityResult(data, ref AppTask);
 | 
			
		||||
 | 
			
		||||
			if (resultCode == KeePass.ExitCloseAfterTaskComplete)
 | 
			
		||||
			{
 | 
			
		||||
				SetResult(KeePass.ExitCloseAfterTaskComplete);
 | 
			
		||||
				AppTask.SetActivityResult(this, KeePass.ExitCloseAfterTaskComplete);
 | 
			
		||||
				Finish();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -75,11 +84,13 @@ namespace keepass2android
 | 
			
		||||
		protected PwGroup Group;
 | 
			
		||||
 | 
			
		||||
		internal AppTask AppTask;
 | 
			
		||||
		private GroupView _groupView;
 | 
			
		||||
		protected GroupView GroupView;
 | 
			
		||||
 | 
			
		||||
		protected override void OnResume() {
 | 
			
		||||
			base.OnResume();
 | 
			
		||||
 | 
			
		||||
			AppTask.SetupGroupBaseActivityButtons(this);
 | 
			
		||||
			
 | 
			
		||||
			RefreshIfDirty();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -121,15 +132,36 @@ namespace keepass2android
 | 
			
		||||
			
 | 
			
		||||
			_prefs = PreferenceManager.GetDefaultSharedPreferences(this);
 | 
			
		||||
 | 
			
		||||
			_groupView = new GroupView(this);
 | 
			
		||||
			SetContentView(_groupView);
 | 
			
		||||
			_groupView.SetNormalButtonVisibility(false, false);
 | 
			
		||||
			GroupView = new GroupView(this);
 | 
			
		||||
			SetContentView(GroupView);
 | 
			
		||||
 | 
			
		||||
			FindViewById(Resource.Id.cancel_insert_element).Click += (sender, args) => StopMovingElement();
 | 
			
		||||
			FindViewById(Resource.Id.insert_element).Click += (sender, args) => InsertElement();
 | 
			
		||||
 | 
			
		||||
			SetResult(KeePass.ExitNormal);
 | 
			
		||||
			
 | 
			
		||||
			StyleScrollBars();
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected override void OnStart()
 | 
			
		||||
		{
 | 
			
		||||
			base.OnStart();
 | 
			
		||||
			AppTask.StartInGroupActivity(this);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void InsertElement()
 | 
			
		||||
		{
 | 
			
		||||
			MoveElementTask moveElementTask = (MoveElementTask)AppTask;
 | 
			
		||||
			IStructureItem elementToMove = App.Kp2a.GetDb().KpDatabase.RootGroup.FindObject(moveElementTask.Uuid, true, null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			var moveElement = new MoveElement(elementToMove, Group, this, App.Kp2a, new ActionOnFinish((success, message) => { StopMovingElement(); }));
 | 
			
		||||
			var progressTask = new ProgressTask(App.Kp2a, this, moveElement);
 | 
			
		||||
			progressTask.Run();
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected void StyleScrollBars() {
 | 
			
		||||
			ListView lv = ListView;
 | 
			
		||||
			lv.ScrollBarStyle =ScrollbarStyles.InsideInset;
 | 
			
		||||
@@ -300,6 +332,7 @@ namespace keepass2android
 | 
			
		||||
				//Currently the action bar only displays the home button when we come from a previous activity.
 | 
			
		||||
				//So we can simply Finish. See this page for information on how to do this in more general (future?) cases:
 | 
			
		||||
				//http://developer.android.com/training/implementing-navigation/ancestral.html
 | 
			
		||||
				AppTask.SetActivityResult(this, KeePass.ExitNormal);
 | 
			
		||||
				Finish();
 | 
			
		||||
				OverridePendingTransition(Resource.Animation.anim_enter_back, Resource.Animation.anim_leave_back);
 | 
			
		||||
 | 
			
		||||
@@ -333,6 +366,12 @@ namespace keepass2android
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override void OnBackPressed()
 | 
			
		||||
		{
 | 
			
		||||
			AppTask.SetActivityResult(this, KeePass.ExitNormal);
 | 
			
		||||
			base.OnBackPressed();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void ToggleSort() {
 | 
			
		||||
			// Toggle setting
 | 
			
		||||
			String sortKey = GetString(Resource.String.sort_key);
 | 
			
		||||
@@ -397,6 +436,60 @@ namespace keepass2android
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public bool IsBeingMoved(PwUuid uuid)
 | 
			
		||||
		{
 | 
			
		||||
			MoveElementTask moveElementTask = AppTask as MoveElementTask;
 | 
			
		||||
			if (moveElementTask != null)
 | 
			
		||||
			{
 | 
			
		||||
				if (moveElementTask.Uuid.EqualsValue(uuid))
 | 
			
		||||
					return true;
 | 
			
		||||
			}
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void StartTask(AppTask task)
 | 
			
		||||
		{
 | 
			
		||||
			AppTask = task;
 | 
			
		||||
			task.StartInGroupActivity(this);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		public void StartMovingElement()
 | 
			
		||||
		{
 | 
			
		||||
			ShowInsertElementButtons();
 | 
			
		||||
			GroupView.ListView.InvalidateViews();
 | 
			
		||||
			BaseAdapter adapter = (BaseAdapter)ListAdapter;
 | 
			
		||||
			adapter.NotifyDataSetChanged();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void ShowInsertElementButtons()
 | 
			
		||||
		{
 | 
			
		||||
			GroupView.ShowInsertButtons();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void StopMovingElement()
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				MoveElementTask moveElementTask = (MoveElementTask)AppTask;
 | 
			
		||||
				IStructureItem elementToMove = App.Kp2a.GetDb().KpDatabase.RootGroup.FindObject(moveElementTask.Uuid, true, null);
 | 
			
		||||
				if (elementToMove.ParentGroup != Group)
 | 
			
		||||
					App.Kp2a.GetDb().Dirty.Add(elementToMove.ParentGroup);
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				//don't crash if adding to dirty fails but log the exception:
 | 
			
		||||
				Kp2aLog.Log(e.ToString());
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			AppTask = new NullTask();
 | 
			
		||||
			AppTask.SetupGroupBaseActivityButtons(this);
 | 
			
		||||
			GroupView.ListView.InvalidateViews();
 | 
			
		||||
			BaseAdapter adapter = (BaseAdapter)ListAdapter;
 | 
			
		||||
			adapter.NotifyDataSetChanged();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ namespace keepass2android
 | 
			
		||||
		public const Result ExitRefresh = Result.FirstUser+2;
 | 
			
		||||
		public const Result ExitRefreshTitle = Result.FirstUser+3;
 | 
			
		||||
		public const Result ExitCloseAfterTaskComplete = Result.FirstUser+4;
 | 
			
		||||
		public const Result TaskComplete = Result.FirstUser + 5;
 | 
			
		||||
		public const Result ExitReloadDb = Result.FirstUser+6;
 | 
			
		||||
 | 
			
		||||
		AppTask _appTask;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										691
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										691
									
								
								src/keepass2android/Resources/Resource.designer.cs
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -51,6 +51,40 @@
 | 
			
		||||
                android:gravity="center_vertical"
 | 
			
		||||
                android:text="@string/add_entry" />
 | 
			
		||||
        </FrameLayout>
 | 
			
		||||
		<FrameLayout
 | 
			
		||||
            android:id="@+id/insert_element"
 | 
			
		||||
            style="@style/BottomBarActionButton"
 | 
			
		||||
            android:layout_width="0dp"
 | 
			
		||||
            android:layout_height="wrap_content"
 | 
			
		||||
            android:layout_weight="1">
 | 
			
		||||
			<TextView
 | 
			
		||||
                style="?android:actionBarTabTextStyle"
 | 
			
		||||
                android:layout_width="wrap_content"
 | 
			
		||||
                android:layout_height="wrap_content"
 | 
			
		||||
                android:layout_gravity="center"
 | 
			
		||||
                android:paddingRight="20dp"
 | 
			
		||||
                android:drawableLeft="@drawable/btn_new_group"
 | 
			
		||||
                android:drawablePadding="8dp"
 | 
			
		||||
                android:gravity="center_vertical"
 | 
			
		||||
                android:text="@string/insert_element_here" />
 | 
			
		||||
		</FrameLayout>
 | 
			
		||||
		<FrameLayout
 | 
			
		||||
            android:id="@+id/cancel_insert_element"
 | 
			
		||||
            style="@style/BottomBarActionButton"
 | 
			
		||||
            android:layout_width="0dp"
 | 
			
		||||
            android:layout_height="wrap_content"
 | 
			
		||||
            android:layout_weight="1">
 | 
			
		||||
			<TextView
 | 
			
		||||
                style="?android:actionBarTabTextStyle"
 | 
			
		||||
                android:layout_width="wrap_content"
 | 
			
		||||
                android:layout_height="wrap_content"
 | 
			
		||||
                android:layout_gravity="center"
 | 
			
		||||
                android:paddingRight="20dp"
 | 
			
		||||
                android:drawableLeft="@android:drawable/ic_menu_close_clear_cancel"
 | 
			
		||||
                android:drawablePadding="8dp"
 | 
			
		||||
                android:gravity="center_vertical"
 | 
			
		||||
                android:text="@string/cancel" />
 | 
			
		||||
		</FrameLayout>
 | 
			
		||||
    </LinearLayout>
 | 
			
		||||
    <View
 | 
			
		||||
        android:id="@+id/divider2"
 | 
			
		||||
 
 | 
			
		||||
@@ -121,6 +121,7 @@
 | 
			
		||||
  <string name="menu_app_settings">Settings</string>
 | 
			
		||||
  <string name="menu_db_settings">Database settings</string>
 | 
			
		||||
  <string name="menu_delete">Delete</string>
 | 
			
		||||
  <string name="menu_move">Move to another group</string>
 | 
			
		||||
  <string name="menu_donate">Donate a beer...</string>
 | 
			
		||||
  <string name="menu_edit">Edit</string>
 | 
			
		||||
  <string name="menu_hide_password">Hide Password</string>
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@
 | 
			
		||||
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
			
		||||
//
 | 
			
		||||
using System;
 | 
			
		||||
using Android.App;
 | 
			
		||||
using Android.Content;
 | 
			
		||||
using Android.OS;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
@@ -135,20 +136,25 @@ namespace keepass2android
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static AppTask CreateFromBundle(Bundle b)
 | 
			
		||||
		{
 | 
			
		||||
			return CreateFromBundle(b, new NullTask());
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static AppTask CreateFromBundle(Bundle b, AppTask failureReturn)
 | 
			
		||||
		{
 | 
			
		||||
			if (b == null)
 | 
			
		||||
				return new NullTask();
 | 
			
		||||
				return failureReturn;
 | 
			
		||||
 | 
			
		||||
			string taskType = b.GetString(AppTaskKey);
 | 
			
		||||
 | 
			
		||||
			if (string.IsNullOrEmpty(taskType))
 | 
			
		||||
				return new NullTask();
 | 
			
		||||
				return failureReturn;
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
			    Type type = Type.GetType("keepass2android." + taskType);
 | 
			
		||||
                if (type == null)
 | 
			
		||||
                    return new NullTask();
 | 
			
		||||
                    return failureReturn;
 | 
			
		||||
				AppTask task = (AppTask)Activator.CreateInstance(type);
 | 
			
		||||
				task.Setup(b);
 | 
			
		||||
				return task;
 | 
			
		||||
@@ -156,7 +162,7 @@ namespace keepass2android
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
			{
 | 
			
		||||
				Kp2aLog.Log("Cannot convert " + taskType + " in task: " + e);
 | 
			
		||||
				return new NullTask();
 | 
			
		||||
				return failureReturn;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
@@ -196,6 +202,42 @@ namespace keepass2android
 | 
			
		||||
			return new StringExtra { Key=AppTaskKey, Value=type.Name};
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public virtual void StartInGroupActivity(GroupBaseActivity groupBaseActivity)
 | 
			
		||||
		{
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public virtual void SetupGroupBaseActivityButtons(GroupBaseActivity groupBaseActivity)
 | 
			
		||||
		{
 | 
			
		||||
			groupBaseActivity.SetupNormalButtons();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public void SetActivityResult(Activity activity, Result result)
 | 
			
		||||
		{
 | 
			
		||||
			Intent data = new Intent();
 | 
			
		||||
			ToIntent(data);
 | 
			
		||||
			activity.SetResult(result, data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Tries to extract the task from the data given as an Intent object in OnActivityResult. If successful, the task is assigned,
 | 
			
		||||
		/// otherwise, false is returned.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public static bool TryGetFromActivityResult(Intent data, ref AppTask task)
 | 
			
		||||
		{
 | 
			
		||||
			if (data == null)
 | 
			
		||||
				return false;
 | 
			
		||||
			AppTask tempTask = CreateFromBundle(data.Extras, null);
 | 
			
		||||
			if (tempTask == null)
 | 
			
		||||
			{
 | 
			
		||||
				Kp2aLog.Log("No AppTask in OnActivityResult");
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			task = tempTask;
 | 
			
		||||
			Kp2aLog.Log("AppTask " +task+" in OnActivityResult");
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
@@ -278,6 +320,15 @@ namespace keepass2android
 | 
			
		||||
				yield return new StringExtra { Key = UuidKey, Value = MemUtil.ByteArrayToHexString(Uuid.UuidBytes) };
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public override void StartInGroupActivity(GroupBaseActivity groupBaseActivity)
 | 
			
		||||
		{
 | 
			
		||||
			base.StartInGroupActivity(groupBaseActivity);
 | 
			
		||||
			groupBaseActivity.StartMovingElement();
 | 
			
		||||
		}
 | 
			
		||||
		public override void SetupGroupBaseActivityButtons(GroupBaseActivity groupBaseActivity)
 | 
			
		||||
		{
 | 
			
		||||
			groupBaseActivity.ShowInsertElementButtons();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -88,18 +88,10 @@ namespace keepass2android.search
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			
 | 
			
		||||
			if ( Group == null || (!Group.Entries.Any()) ) {
 | 
			
		||||
				SetContentView(new GroupEmptyView(this));
 | 
			
		||||
			} else
 | 
			
		||||
			{
 | 
			
		||||
				_groupView = new GroupView(this);
 | 
			
		||||
				SetContentView(_groupView);
 | 
			
		||||
				_groupView.SetNormalButtonVisibility(false, false);
 | 
			
		||||
			} 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			SetGroupTitle();
 | 
			
		||||
			
 | 
			
		||||
			ListAdapter = new PwGroupListAdapter(this, Group);
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,11 @@ namespace keepass2android.view
 | 
			
		||||
			Inflate(context);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public ListView ListView
 | 
			
		||||
		{
 | 
			
		||||
			get { return (ListView) FindViewById(Android.Resource.Id.List); }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void Inflate(Context context) {
 | 
			
		||||
			LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
 | 
			
		||||
			inflater.Inflate(Resource.Layout.group_add_entry, this);
 | 
			
		||||
@@ -48,24 +53,27 @@ namespace keepass2android.view
 | 
			
		||||
		}
 | 
			
		||||
		public void SetNormalButtonVisibility(bool showAddGroup, bool showAddEntry)
 | 
			
		||||
		{
 | 
			
		||||
			if (!showAddGroup)
 | 
			
		||||
			{
 | 
			
		||||
				View addGroup = FindViewById(Resource.Id.add_group);
 | 
			
		||||
				addGroup.Visibility = ViewStates.Invisible;	
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!showAddEntry)
 | 
			
		||||
			{
 | 
			
		||||
			View insertElement = FindViewById(Resource.Id.insert_element);
 | 
			
		||||
			insertElement.Visibility = ViewStates.Gone;
 | 
			
		||||
 | 
			
		||||
			View insertElementCancel = FindViewById(Resource.Id.cancel_insert_element);
 | 
			
		||||
			insertElementCancel.Visibility = ViewStates.Gone;	
 | 
			
		||||
 | 
			
		||||
			View addGroup = FindViewById(Resource.Id.add_group);
 | 
			
		||||
			addGroup.Visibility = showAddGroup? ViewStates.Visible : ViewStates.Gone;	
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
			View addEntry = FindViewById(Resource.Id.add_entry);
 | 
			
		||||
				addEntry.Visibility = ViewStates.Invisible;	
 | 
			
		||||
			}
 | 
			
		||||
			addEntry.Visibility = showAddEntry ? ViewStates.Visible : ViewStates.Gone;	
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			if (!showAddEntry && !showAddGroup)
 | 
			
		||||
			{
 | 
			
		||||
				View divider2 = FindViewById(Resource.Id.divider2);
 | 
			
		||||
				divider2.Visibility = ViewStates.Invisible;
 | 
			
		||||
				divider2.Visibility = ViewStates.Gone;
 | 
			
		||||
 | 
			
		||||
				FindViewById(Resource.Id.bottom_bar).Visibility = ViewStates.Invisible;
 | 
			
		||||
				FindViewById(Resource.Id.bottom_bar).Visibility = ViewStates.Gone;
 | 
			
		||||
 | 
			
		||||
				View list = FindViewById(Android.Resource.Id.List);
 | 
			
		||||
				LayoutParams lp = (RelativeLayout.LayoutParams) list.LayoutParameters;
 | 
			
		||||
@@ -76,6 +84,20 @@ namespace keepass2android.view
 | 
			
		||||
 | 
			
		||||
		public void ShowInsertButtons()
 | 
			
		||||
		{
 | 
			
		||||
			View addGroup = FindViewById(Resource.Id.add_group);
 | 
			
		||||
			addGroup.Visibility = ViewStates.Gone;
 | 
			
		||||
 | 
			
		||||
			View addEntry = FindViewById(Resource.Id.add_entry);
 | 
			
		||||
			addEntry.Visibility = ViewStates.Gone;
 | 
			
		||||
 | 
			
		||||
			View insertElement = FindViewById(Resource.Id.insert_element);
 | 
			
		||||
			insertElement.Visibility = ViewStates.Visible;
 | 
			
		||||
 | 
			
		||||
			View insertElementCancel = FindViewById(Resource.Id.cancel_insert_element);
 | 
			
		||||
			insertElementCancel.Visibility = ViewStates.Visible;
 | 
			
		||||
 | 
			
		||||
			View divider2 = FindViewById(Resource.Id.divider2);
 | 
			
		||||
			divider2.Visibility = ViewStates.Visible;
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
 | 
			
		||||
  along with Keepass2Android.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
  */
 | 
			
		||||
using System;
 | 
			
		||||
using Android.Graphics;
 | 
			
		||||
using Android.OS;
 | 
			
		||||
using Android.Runtime;
 | 
			
		||||
using Android.Views;
 | 
			
		||||
@@ -38,6 +39,7 @@ namespace keepass2android.view
 | 
			
		||||
 | 
			
		||||
		private const int MenuOpen = Menu.First;
 | 
			
		||||
		private const int MenuDelete = MenuOpen + 1;
 | 
			
		||||
		private const int MenuMove = MenuDelete + 1;
 | 
			
		||||
		
 | 
			
		||||
		public static PwEntryView GetInstance(GroupBaseActivity act, PwEntry pw, int pos)
 | 
			
		||||
		{
 | 
			
		||||
@@ -96,6 +98,12 @@ namespace keepass2android.view
 | 
			
		||||
			}
 | 
			
		||||
			_textView.TextFormatted = str;
 | 
			
		||||
 | 
			
		||||
			//todo: get colors from resources
 | 
			
		||||
			if (_groupActivity.IsBeingMoved(_entry.Uuid))
 | 
			
		||||
				_textView.SetTextColor(new Color(180,180,180));
 | 
			
		||||
			else
 | 
			
		||||
				_textView.SetTextColor(new Color(0,0,0));
 | 
			
		||||
 | 
			
		||||
			String detail = pw.Strings.ReadSafe(PwDefs.UserNameField);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +145,7 @@ namespace keepass2android.view
 | 
			
		||||
		{
 | 
			
		||||
			menu.Add(0, MenuOpen, 0, Resource.String.menu_open);
 | 
			
		||||
			menu.Add(0, MenuDelete, 0, Resource.String.menu_delete);
 | 
			
		||||
			menu.Add(0, MenuMove, 0, Resource.String.menu_move);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public override bool OnContextItemSelected(IMenuItem item)
 | 
			
		||||
@@ -152,6 +161,9 @@ namespace keepass2android.view
 | 
			
		||||
					DeleteEntry task = new DeleteEntry(Context, App.Kp2a, _entry, new GroupBaseActivity.RefreshTask(handler, _groupActivity));
 | 
			
		||||
					task.Start();
 | 
			
		||||
					return true;
 | 
			
		||||
				case MenuMove:
 | 
			
		||||
					_groupActivity.StartTask(new MoveElementTask { Uuid = _entry.Uuid});
 | 
			
		||||
					return true;
 | 
			
		||||
			
 | 
			
		||||
				default:
 | 
			
		||||
					return false;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user