├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.txt └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── antonioleiva │ │ └── mvpexample │ │ └── app │ │ ├── Login │ │ ├── LoginActivity.java │ │ ├── LoginManager.java │ │ ├── LoginManagerImpl.java │ │ ├── LoginPresenter.java │ │ ├── LoginPresenterImpl.java │ │ ├── LoginView.java │ │ └── OnLoginFinishedListener.java │ │ └── main │ │ ├── FindItemsManager.java │ │ ├── FindItemsManagerImpl.java │ │ ├── MainActivity.java │ │ ├── MainPresenter.java │ │ ├── MainPresenterImpl.java │ │ ├── MainView.java │ │ └── OnFinishedListener.java │ └── res │ ├── drawable-hdpi │ ├── ic_action_accept.png │ ├── ic_action_accounts.png │ ├── ic_action_person.png │ └── ic_launcher.png │ ├── drawable-mdpi │ ├── ic_action_accept.png │ ├── ic_action_accounts.png │ ├── ic_action_person.png │ └── ic_launcher.png │ ├── drawable-xhdpi │ ├── ic_action_accept.png │ ├── ic_action_accounts.png │ ├── ic_action_person.png │ └── ic_launcher.png │ ├── drawable-xxhdpi │ ├── ic_action_accept.png │ ├── ic_action_accounts.png │ ├── ic_action_person.png │ └── ic_launcher.png │ ├── layout │ ├── activity_login.xml │ └── activity_main.xml │ ├── menu │ ├── login.xml │ └── main.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | ./gradlew.bat 18 | ./gradlew 19 | build/ 20 | 21 | # Mirror files 22 | mirror/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Intellij project files 31 | *.iws 32 | .idea/workspace.xml 33 | .idea/tasks.xml 34 | .idea 35 | 36 | *.iml 37 | 38 | # OS 39 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | androidmvp 2 | ========== 3 | 4 | 这个是一个MVP模式在Android中的使用的例子 5 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 22 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | minSdkVersion 15 9 | targetSdkVersion 15 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | 14 | compileOptions { 15 | sourceCompatibility JavaVersion.VERSION_1_7 16 | targetCompatibility JavaVersion.VERSION_1_7 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 22 | } 23 | } 24 | } 25 | 26 | dependencies { 27 | compile fileTree(dir: 'libs', include: ['*.jar']) 28 | } 29 | -------------------------------------------------------------------------------- /app/proguard-rules.txt: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:/Desarrollo/Entorno Android/01 Entorno de Desarrollo/adt-bundle-windows/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the ProGuard 5 | # include property in project.properties. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | import android.app.Activity; 22 | import android.content.Intent; 23 | import android.os.Bundle; 24 | import android.view.View; 25 | import android.widget.EditText; 26 | import android.widget.ProgressBar; 27 | 28 | import com.antonioleiva.mvpexample.app.R; 29 | import com.antonioleiva.mvpexample.app.main.MainActivity; 30 | 31 | /** 32 | * 33 | */ 34 | 35 | public class LoginActivity extends Activity implements LoginView, View.OnClickListener { 36 | 37 | private ProgressBar progressBar; 38 | private EditText username; 39 | private EditText password; 40 | private LoginPresenter presenter; 41 | 42 | @Override 43 | protected void onCreate(Bundle savedInstanceState) { 44 | super.onCreate(savedInstanceState); 45 | setContentView(R.layout.activity_login); 46 | 47 | progressBar = (ProgressBar) findViewById(R.id.progress); 48 | username = (EditText) findViewById(R.id.username); 49 | password = (EditText) findViewById(R.id.password); 50 | findViewById(R.id.button).setOnClickListener(this); 51 | 52 | presenter = new LoginPresenterImpl(this); 53 | } 54 | 55 | @Override public void showProgress() { 56 | progressBar.setVisibility(View.VISIBLE); 57 | } 58 | 59 | @Override public void hideProgress() { 60 | progressBar.setVisibility(View.GONE); 61 | } 62 | 63 | @Override public void setUsernameError() { 64 | username.setError(getString(R.string.username_error)); 65 | } 66 | 67 | @Override public void setPasswordError() { 68 | password.setError(getString(R.string.password_error)); 69 | } 70 | 71 | @Override public void navigateToHome() { 72 | startActivity(new Intent(this, MainActivity.class)); 73 | finish(); 74 | } 75 | 76 | @Override public void onClick(View v) { 77 | presenter.validateCredentials(username.getText().toString(), password.getText().toString()); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | public interface LoginManager { 22 | public void login(String username, String password, OnLoginFinishedListener listener); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.antonioleiva.mvpexample.app.Login; 2 | 3 | import android.os.Handler; 4 | import android.text.TextUtils; 5 | 6 | public class LoginManagerImpl implements LoginManager { 7 | 8 | @Override 9 | public void login(final String username, final String password, final OnLoginFinishedListener listener) { 10 | // Mock login. I'm creating a handler to delay the answer a couple of seconds 11 | new Handler().postDelayed(new Runnable() { 12 | @Override public void run() { 13 | boolean error = false; 14 | if (TextUtils.isEmpty(username)){ 15 | listener.onUsernameError(); 16 | error = true; 17 | } 18 | if (TextUtils.isEmpty(password)){ 19 | listener.onPasswordError(); 20 | error = true; 21 | } 22 | if (!error){ 23 | listener.onSuccess(); 24 | } 25 | } 26 | }, 2000); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginPresenter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | public interface LoginPresenter { 22 | public void validateCredentials(String username, String password); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginPresenterImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | public class LoginPresenterImpl implements LoginPresenter, OnLoginFinishedListener { 22 | 23 | private LoginView loginView; 24 | private LoginManager loginManager; 25 | 26 | public LoginPresenterImpl(LoginView loginView) { 27 | this.loginView = loginView; 28 | this.loginManager = new LoginManagerImpl(); 29 | } 30 | 31 | @Override public void validateCredentials(String username, String password) { 32 | loginView.showProgress(); 33 | loginManager.login(username, password, this); 34 | } 35 | 36 | @Override public void onUsernameError() { 37 | loginView.setUsernameError(); 38 | loginView.hideProgress(); 39 | } 40 | 41 | @Override public void onPasswordError() { 42 | loginView.setPasswordError(); 43 | loginView.hideProgress(); 44 | } 45 | 46 | @Override public void onSuccess() { 47 | loginView.navigateToHome(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/LoginView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | public interface LoginView { 22 | public void showProgress(); 23 | 24 | public void hideProgress(); 25 | 26 | public void setUsernameError(); 27 | 28 | public void setPasswordError(); 29 | 30 | public void navigateToHome(); 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/Login/OnLoginFinishedListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.Login; 20 | 21 | public interface OnLoginFinishedListener { 22 | 23 | public void onUsernameError(); 24 | 25 | public void onPasswordError(); 26 | 27 | public void onSuccess(); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/FindItemsManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | public interface FindItemsManager { 22 | 23 | public void findItems(OnFinishedListener listener); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/FindItemsManagerImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | import android.os.Handler; 22 | 23 | import java.util.Arrays; 24 | import java.util.List; 25 | 26 | public class FindItemsManagerImpl implements FindItemsManager { 27 | @Override public void findItems(final OnFinishedListener listener) { 28 | new Handler().postDelayed(new Runnable() { 29 | @Override public void run() { 30 | listener.onFinished(createArrayList()); 31 | } 32 | }, 2000); 33 | } 34 | 35 | private List createArrayList() { 36 | return Arrays.asList( 37 | "Item 1", 38 | "Item 2", 39 | "Item 3", 40 | "Item 4", 41 | "Item 5", 42 | "Item 6", 43 | "Item 7", 44 | "Item 8", 45 | "Item 9", 46 | "Item 10" 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/MainActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | import android.app.Activity; 22 | import android.os.Bundle; 23 | import android.view.Menu; 24 | import android.view.MenuItem; 25 | import android.view.View; 26 | import android.widget.AdapterView; 27 | import android.widget.ArrayAdapter; 28 | import android.widget.ListView; 29 | import android.widget.ProgressBar; 30 | import android.widget.Toast; 31 | 32 | import com.antonioleiva.mvpexample.app.R; 33 | 34 | import java.util.List; 35 | 36 | public class MainActivity extends Activity implements MainView, AdapterView.OnItemClickListener { 37 | 38 | private ListView listView; 39 | private ProgressBar progressBar; 40 | private MainPresenter presenter; 41 | 42 | @Override 43 | protected void onCreate(Bundle savedInstanceState) { 44 | super.onCreate(savedInstanceState); 45 | setContentView(R.layout.activity_main); 46 | listView = (ListView) findViewById(R.id.list); 47 | listView.setOnItemClickListener(this); 48 | progressBar = (ProgressBar) findViewById(R.id.progress); 49 | presenter = new MainPresenterImpl(this); 50 | 51 | } 52 | 53 | @Override protected void onResume() { 54 | super.onResume(); 55 | presenter.onResume(); 56 | } 57 | 58 | @Override 59 | public boolean onCreateOptionsMenu(Menu menu) { 60 | // Inflate the menu; this adds items to the action bar if it is present. 61 | getMenuInflater().inflate(R.menu.main, menu); 62 | return true; 63 | } 64 | 65 | @Override 66 | public boolean onOptionsItemSelected(MenuItem item) { 67 | // Handle action bar item clicks here. The action bar will 68 | // automatically handle clicks on the Home/Up button, so long 69 | // as you specify a parent activity in AndroidManifest.xml. 70 | int id = item.getItemId(); 71 | if (id == R.id.action_settings) { 72 | return true; 73 | } 74 | return super.onOptionsItemSelected(item); 75 | } 76 | 77 | @Override public void showProgress() { 78 | progressBar.setVisibility(View.VISIBLE); 79 | listView.setVisibility(View.INVISIBLE); 80 | } 81 | 82 | @Override public void hideProgress() { 83 | progressBar.setVisibility(View.INVISIBLE); 84 | listView.setVisibility(View.VISIBLE); 85 | } 86 | 87 | @Override public void setItems(List items) { 88 | listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, items)); 89 | } 90 | 91 | @Override public void showMessage(String message) { 92 | Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 93 | } 94 | 95 | @Override public void onItemClick(AdapterView parent, View view, int position, long id) { 96 | presenter.onItemClicked(position); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/MainPresenter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | public interface MainPresenter { 22 | 23 | public void onResume(); 24 | 25 | public void onItemClicked(int position); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/MainPresenterImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | import java.util.List; 22 | 23 | public class MainPresenterImpl implements MainPresenter, OnFinishedListener { 24 | 25 | private MainView mainView; 26 | private FindItemsManager findItemsManager; 27 | 28 | public MainPresenterImpl(MainView mainView) { 29 | this.mainView = mainView; 30 | findItemsManager = new FindItemsManagerImpl(); 31 | } 32 | 33 | @Override public void onResume() { 34 | mainView.showProgress(); 35 | findItemsManager.findItems(this); 36 | } 37 | 38 | @Override public void onItemClicked(int position) { 39 | mainView.showMessage(String.format("Position %d clicked", position + 1)); 40 | } 41 | 42 | @Override public void onFinished(List items) { 43 | mainView.setItems(items); 44 | mainView.hideProgress(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/MainView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | import java.util.List; 22 | 23 | public interface MainView { 24 | 25 | public void showProgress(); 26 | 27 | public void hideProgress(); 28 | 29 | public void setItems(List items); 30 | 31 | public void showMessage(String message); 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/antonioleiva/mvpexample/app/main/OnFinishedListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * * Copyright (C) 2014 Antonio Leiva Gordillo. 4 | * * 5 | * * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * * you may not use this file except in compliance with the License. 7 | * * You may obtain a copy of the License at 8 | * * 9 | * * http://www.apache.org/licenses/LICENSE-2.0 10 | * * 11 | * * Unless required by applicable law or agreed to in writing, software 12 | * * distributed under the License is distributed on an "AS IS" BASIS, 13 | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * * See the License for the specific language governing permissions and 15 | * * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.antonioleiva.mvpexample.app.main; 20 | 21 | import java.util.List; 22 | 23 | public interface OnFinishedListener { 24 | 25 | void onFinished(List items); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-hdpi/ic_action_accept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_accounts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-hdpi/ic_action_accounts.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-hdpi/ic_action_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-mdpi/ic_action_accept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_accounts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-mdpi/ic_action_accounts.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-mdpi/ic_action_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xhdpi/ic_action_accept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_accounts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xhdpi/ic_action_accounts.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xhdpi/ic_action_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xxhdpi/ic_action_accept.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_accounts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xxhdpi/ic_action_accounts.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xxhdpi/ic_action_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuguangli/androidmvp/58e444609e7e5c18b61ffd625b958ed02e05c189/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | 29 |