diff --git a/doc/4(软件工程).docx b/doc/4(软件工程).docx new file mode 100644 index 0000000..29cf290 Binary files /dev/null and b/doc/4(软件工程).docx differ diff --git a/doc/开源软件维护.pptx b/doc/开源软件维护.pptx new file mode 100644 index 0000000..02f29c2 Binary files /dev/null and b/doc/开源软件维护.pptx differ diff --git a/src/vks/.gitignore b/src/vks/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/src/vks/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/src/vks/.idea/.gitignore b/src/vks/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/src/vks/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/src/vks/.idea/compiler.xml b/src/vks/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/src/vks/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/vks/.idea/deploymentTargetSelector.xml b/src/vks/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..b268ef3 --- /dev/null +++ b/src/vks/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/vks/.idea/gradle.xml b/src/vks/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/src/vks/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/vks/.idea/migrations.xml b/src/vks/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/src/vks/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/vks/.idea/misc.xml b/src/vks/.idea/misc.xml new file mode 100644 index 0000000..0ad17cb --- /dev/null +++ b/src/vks/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/vks/app/.gitignore b/src/vks/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/vks/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/vks/app/build.gradle.kts b/src/vks/app/build.gradle.kts new file mode 100644 index 0000000..47fb145 --- /dev/null +++ b/src/vks/app/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "net.micode.vks" + compileSdk = 34 + + defaultConfig { + applicationId = "net.micode.vks" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation(libs.appcompat) + implementation(libs.material) + implementation(libs.activity) + implementation(libs.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.ext.junit) + androidTestImplementation(libs.espresso.core) +} \ No newline at end of file diff --git a/src/vks/app/proguard-rules.pro b/src/vks/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/vks/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/vks/app/src/androidTest/java/net/micode/vks/ExampleInstrumentedTest.java b/src/vks/app/src/androidTest/java/net/micode/vks/ExampleInstrumentedTest.java new file mode 100644 index 0000000..23206ed --- /dev/null +++ b/src/vks/app/src/androidTest/java/net/micode/vks/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package net.micode.vks; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("net.micode.vks", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/vks/app/src/main/AndroidManifest.xml b/src/vks/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4f036b6 --- /dev/null +++ b/src/vks/app/src/main/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + diff --git a/src/vks/app/src/main/java/net/micode/vks/Insertuser_Activity.java b/src/vks/app/src/main/java/net/micode/vks/Insertuser_Activity.java new file mode 100644 index 0000000..8b9e2d4 --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/Insertuser_Activity.java @@ -0,0 +1,66 @@ +package net.micode.vks; + +import android.app.Activity; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; + +import androidx.annotation.Nullable; + +public class Insertuser_Activity extends Activity { + private EditText name_edit,paswd_edit,age_edit; + private Spinner spinner; + private Button save_btn; + private String select_sex="男"; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.user_insert); + init(); + } + + private void init() { + name_edit=(EditText)findViewById(R.id.insert_name); + paswd_edit=(EditText)findViewById(R.id.insert_paswd); + spinner=(Spinner)findViewById(R.id.insert_sex); + + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + select_sex=Insertuser_Activity.this.getResources().getStringArray(R.array.sex)[i]; + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + age_edit=(EditText)findViewById(R.id.insert_age); + save_btn=(Button) findViewById(R.id.save_usermes); + save_btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + String name_str=name_edit.getText().toString(); + String paswd_str=paswd_edit.getText().toString(); + int age=Integer.parseInt(age_edit.getText().toString()); + + User_Database us_db=new User_Database(Insertuser_Activity.this); + SQLiteDatabase sqLiteDatabase=us_db.getWritableDatabase(); + us_db.adddata(sqLiteDatabase,name_str,paswd_str,select_sex,age); + Intent intent=new Intent(Insertuser_Activity.this, Sea_deluser_Activity.class); + startActivity(intent); + } + }); + } + +} + + diff --git a/src/vks/app/src/main/java/net/micode/vks/MainActivity.java b/src/vks/app/src/main/java/net/micode/vks/MainActivity.java new file mode 100644 index 0000000..5b72367 --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/MainActivity.java @@ -0,0 +1,58 @@ +package net.micode.vks; + +import android.app.Activity; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +public class MainActivity extends Activity implements View.OnClickListener { + private static final String TAG = "MainActivity"; + public User_Database user; + public SQLiteDatabase sqL_read; + private Button search_del_btn, insert_btn, update_btn; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + user = new User_Database(this); + sqL_read = user.getReadableDatabase(); + init(); + } + + public void init() { + search_del_btn = findViewById(R.id.btn_search_delete); + insert_btn = findViewById(R.id.btn_add); + update_btn = findViewById(R.id.btn_update); + + // 检查按钮是否找到 + if (search_del_btn == null) Log.e(TAG, "btn_search_delete未找到"); + if (insert_btn == null) Log.e(TAG, "btn_add未找到"); + if (update_btn == null) Log.e(TAG, "btn_update未找到"); + + search_del_btn.setOnClickListener(this); + insert_btn.setOnClickListener(this); + update_btn.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int clickedId = view.getId(); + Log.d(TAG, "点击的按钮ID: " + clickedId); + + if (clickedId == R.id.btn_search_delete) { + Log.d(TAG, "跳转到Sea_deluser_Activity"); + startActivity(new Intent(this, Sea_deluser_Activity.class)); + } else if (clickedId == R.id.btn_add) { + Log.d(TAG, "跳转到Insertuser_Activity"); + startActivity(new Intent(this, Insertuser_Activity.class)); + } else if (clickedId == R.id.btn_update) { + Log.d(TAG, "跳转到Updateuser_Activity"); + startActivity(new Intent(this, Updareuser_Activity.class)); + } + } +} \ No newline at end of file diff --git a/src/vks/app/src/main/java/net/micode/vks/Sea_deluser_Activity.java b/src/vks/app/src/main/java/net/micode/vks/Sea_deluser_Activity.java new file mode 100644 index 0000000..2ee36c7 --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/Sea_deluser_Activity.java @@ -0,0 +1,64 @@ +package net.micode.vks; + + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Toast; + +import java.util.List; + +public class Sea_deluser_Activity extends Activity { + public ListView user_list; + private List list; + private SQLiteDatabase sqLiteDatabase; + private String[] user_mes; + + @Override + protected void onCreate(Bundle saveInstanceState) { + super.onCreate(saveInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.user_search_delete); + user_list = findViewById(R.id.mes); + User_Database users = new User_Database(Sea_deluser_Activity.this); + sqLiteDatabase = users.getReadableDatabase(); + list = users.querydata(sqLiteDatabase); + user_mes = new String[list.size()]; + for (int i=0; i adapter = new ArrayAdapter(Sea_deluser_Activity.this, android.R.layout.simple_list_item_1, user_mes); + user_list.setAdapter(adapter); + user_list.setOnItemClickListener(new AdapterView.OnItemClickListener(){ + public void onItemClick(AdapterView adapterView, View view, int I, long l){ + final int id = list.get(I).getId(); + new AlertDialog.Builder(Sea_deluser_Activity.this).setTitle("系统提示").setMessage("确认删除该条数据吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + User_Database user_database = new User_Database(Sea_deluser_Activity.this); + SQLiteDatabase sqLiteDatabase = user_database.getWritableDatabase(); + user_database.delete(sqLiteDatabase, id); + refresh(); + Toast.makeText(Sea_deluser_Activity.this,"删除成功", Toast.LENGTH_SHORT).show(); + } + }).setNegativeButton("取消",new DialogInterface.OnClickListener(){ + public void onClick(DialogInterface dialog , int which){} + }).show(); + } + }); + } + + private void refresh(){ + finish(); + Intent intent = new Intent(Sea_deluser_Activity.this, Sea_deluser_Activity.class); + startActivity(intent); + } +} diff --git a/src/vks/app/src/main/java/net/micode/vks/Updareuser_Activity.java b/src/vks/app/src/main/java/net/micode/vks/Updareuser_Activity.java new file mode 100644 index 0000000..b538e68 --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/Updareuser_Activity.java @@ -0,0 +1,122 @@ +package net.micode.vks; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.Toast; + +import java.util.List; + +public class Updareuser_Activity extends Activity { + private EditText searchUser, updateName, updatePaswd, updateAge; + private Spinner updateSex; + private Button btnSearch, btnSave; + private String selectedSex = "男"; + private int userId = -1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_update); + initViews(); + setupListeners(); + } + + @SuppressLint("WrongViewCast") + private void initViews() { + searchUser = findViewById(R.id.search_user); + btnSearch = findViewById(R.id.btn_search); + updateName = findViewById(R.id.update_name); + updatePaswd = findViewById(R.id.update_paswd); + updateSex = findViewById(R.id.update_sex); + updateAge = findViewById(R.id.update_age); + btnSave = findViewById(R.id.btn_save); + + // 初始化性别选择器 + updateSex.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + selectedSex = getResources().getStringArray(R.array.sex)[position]; + } + + @Override + public void onNothingSelected(AdapterView parent) { + } + }); + } + + private void setupListeners() { + // 搜索用户 + btnSearch.setOnClickListener(v -> searchUser()); + + // 保存修改 + btnSave.setOnClickListener(v -> saveChanges()); + } + + private void searchUser() { + String username = searchUser.getText().toString().trim(); + if (username.isEmpty()) { + Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); + return; + } + + User_Database dbHelper = new User_Database(this); + SQLiteDatabase db = dbHelper.getReadableDatabase(); + List users = dbHelper.querydata(db); + + for (UserInfo user : users) { + if (user.getUsername().equals(username)) { + userId = user.getId(); + updateName.setText(user.getUsername()); + updatePaswd.setText(user.getPaswd()); + updateAge.setText(String.valueOf(user.getAge())); + + // 设置性别选择 + String[] sexOptions = getResources().getStringArray(R.array.sex); + for (int i = 0; i < sexOptions.length; i++) { + if (sexOptions[i].equals(user.getSex())) { + updateSex.setSelection(i); + break; + } + } + return; + } + } + Toast.makeText(this, "未找到该用户", Toast.LENGTH_SHORT).show(); + } + + private void saveChanges() { + if (userId == -1) { + Toast.makeText(this, "请先搜索要修改的用户", Toast.LENGTH_SHORT).show(); + return; + } + + String newName = updateName.getText().toString().trim(); + String newPaswd = updatePaswd.getText().toString().trim(); + String ageStr = updateAge.getText().toString().trim(); + + if (newName.isEmpty() || newPaswd.isEmpty() || ageStr.isEmpty()) { + Toast.makeText(this, "请填写所有字段", Toast.LENGTH_SHORT).show(); + return; + } + + try { + int newAge = Integer.parseInt(ageStr); + + User_Database dbHelper = new User_Database(this); + SQLiteDatabase db = dbHelper.getWritableDatabase(); + dbHelper.update(db, userId, newName, newPaswd, selectedSex, newAge); + + Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show(); + finish(); // 返回上一页 + } catch (NumberFormatException e) { + Toast.makeText(this, "年龄必须为数字", Toast.LENGTH_SHORT).show(); + } + } +} \ No newline at end of file diff --git a/src/vks/app/src/main/java/net/micode/vks/UserInfo.java b/src/vks/app/src/main/java/net/micode/vks/UserInfo.java new file mode 100644 index 0000000..28a9728 --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/UserInfo.java @@ -0,0 +1,66 @@ +package net.micode.vks; + +public class UserInfo { + int id; + String username; + String paswd,sex; + int age; + + public UserInfo(int id,String username,String paswd,String sex,int age){ + this.id=id; + this.username=username; + this.paswd=paswd; + this.sex=sex; + this.age=age; + } + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPaswd() { + return paswd; + } + + public void setPaswd(String paswd) { + this.paswd = paswd; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return "UserInfo{" + + "id=" + id + + ", username='" + username + '\'' + + ", paswd='" + paswd + '\'' + + ", sex='" + sex + '\'' + + ", age=" + age + + '}'; + } +} diff --git a/src/vks/app/src/main/java/net/micode/vks/User_Database.java b/src/vks/app/src/main/java/net/micode/vks/User_Database.java new file mode 100644 index 0000000..e98359f --- /dev/null +++ b/src/vks/app/src/main/java/net/micode/vks/User_Database.java @@ -0,0 +1,73 @@ +package net.micode.vks; + +import android.annotation.SuppressLint; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.ArrayList; +import java.util.List; + +public class User_Database extends SQLiteOpenHelper { + Context context; + public User_Database( Context context) { + super(context, "user_db",null,1); + this.context=context; + } + + @Override + public void onCreate(SQLiteDatabase sqLiteDatabase) { + String sql="create table user(id integer primary key autoincrement,username varchar(20),paswd varchar(20),sex varchar(20),age integer)"; + sqLiteDatabase.execSQL(sql); + } + + @Override + public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { + + } + //添加 + public void adddata(SQLiteDatabase sqLiteDatabase,String username,String paswd,String sex,int age){ + ContentValues values=new ContentValues(); + values.put("username",username); + values.put("paswd",paswd); + values.put("sex",sex); + values.put("age",age); + sqLiteDatabase.insert("user",null,values); + sqLiteDatabase.close(); + } + + //删除 + public void delete(SQLiteDatabase sqLiteDatabase,int id){ + sqLiteDatabase.delete("user","id=?",new String[]{id+""}); + sqLiteDatabase.close(); + } + //更新 + public void update(SQLiteDatabase sqLiteDatabase,int id,String username,String paswd,String sex,int age){ + ContentValues values=new ContentValues(); + values.put("username",username); + values.put("paswd",paswd); + values.put("sex",sex); + values.put("age",age); + sqLiteDatabase.update("user",values,"id=?",new String[]{id+""}); + sqLiteDatabase.close(); + } + + //查询 + public Listquerydata(SQLiteDatabase sqLiteDatabase){ + Cursor cursor=sqLiteDatabase.query("user",null,null,null,null,null,"id ASC"); + Listlist=new ArrayList(); + while(cursor.moveToNext()){ + @SuppressLint("Range") int id=cursor.getInt(((Cursor) cursor).getColumnIndex("id")); + String username=cursor.getString(1); + String paswd=cursor.getString(2); + String sex=cursor.getString(3); + @SuppressLint("Range") int age=cursor.getInt(cursor.getColumnIndex("age")); + list.add(new UserInfo(id,username,paswd,sex,age)); + } + cursor.close(); + sqLiteDatabase.close(); + return list; + } +} diff --git a/src/vks/app/src/main/res/drawable/a.jpg b/src/vks/app/src/main/res/drawable/a.jpg new file mode 100644 index 0000000..3a081da Binary files /dev/null and b/src/vks/app/src/main/res/drawable/a.jpg differ diff --git a/src/vks/app/src/main/res/drawable/b.jpg b/src/vks/app/src/main/res/drawable/b.jpg new file mode 100644 index 0000000..6e75add Binary files /dev/null and b/src/vks/app/src/main/res/drawable/b.jpg differ diff --git a/src/vks/app/src/main/res/drawable/btn_bg.xml b/src/vks/app/src/main/res/drawable/btn_bg.xml new file mode 100644 index 0000000..6330375 --- /dev/null +++ b/src/vks/app/src/main/res/drawable/btn_bg.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/c.jpg b/src/vks/app/src/main/res/drawable/c.jpg new file mode 100644 index 0000000..92aa0d6 Binary files /dev/null and b/src/vks/app/src/main/res/drawable/c.jpg differ diff --git a/src/vks/app/src/main/res/drawable/edit_shape.xml b/src/vks/app/src/main/res/drawable/edit_shape.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/src/vks/app/src/main/res/drawable/edit_shape.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/frame_bg.xml b/src/vks/app/src/main/res/drawable/frame_bg.xml new file mode 100644 index 0000000..ded4e4d --- /dev/null +++ b/src/vks/app/src/main/res/drawable/frame_bg.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/ic_launcher_background.xml b/src/vks/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/src/vks/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/vks/app/src/main/res/drawable/ic_launcher_foreground.xml b/src/vks/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/src/vks/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/list_background.xml b/src/vks/app/src/main/res/drawable/list_background.xml new file mode 100644 index 0000000..c4ca2bb --- /dev/null +++ b/src/vks/app/src/main/res/drawable/list_background.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/list_divider.xml b/src/vks/app/src/main/res/drawable/list_divider.xml new file mode 100644 index 0000000..7f6ba8c --- /dev/null +++ b/src/vks/app/src/main/res/drawable/list_divider.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/drawable/toolbar_shadow.xml b/src/vks/app/src/main/res/drawable/toolbar_shadow.xml new file mode 100644 index 0000000..57f1182 --- /dev/null +++ b/src/vks/app/src/main/res/drawable/toolbar_shadow.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/vks/app/src/main/res/layout/activity_main.xml b/src/vks/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..0344574 --- /dev/null +++ b/src/vks/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,105 @@ + + + +