/*
========================================================================================
Filename: 27_ProductDatabase.txt
Program 27: Create an app to show product names using database and the following controls: ListView, GridView, TextBox, Button.
Files Included: MainActivity.java, DatabaseHelper.java
========================================================================================

WHAT ALL TO DO / SETUP INSTRUCTIONS:
----------------------------------------------------------------------------------------
1. UI Components to Add (in res/layout/activity_main.xml):
   Add 1 EditText (TextBox):
     - etProduct (Hint: 'Enter Product Name')
   Add 1 Button:
     - Text: 'Add Product', onClick: 'addProduct'
   Add 3 TextView:
     - Heading: 'Product Database'
     - Subheadings: 'Product List', 'Product Grid'
   Add 1 ListView: id listView (renders product list)
   Add 1 GridView: id gridView (numColumns='2', renders product grid)

2. Layout Configuration:
   - LinearLayout (vertical, padding 20dp)

3. Menu Configuration:
   - None required.

4. Themes Configuration (res/values/themes.xml):
   - Theme.MaterialComponents.DayNight.NoActionBar in themes.xml.

5. AndroidManifest.xml:
   <activity android:name=".MainActivity" android:exported="true" />

6. Additional Files & Resources Required:
   - Create DatabaseHelper.java for SQLite storage of product names. Displays data simultaneously in ListView and GridView via ArrayAdapter.
========================================================================================
*/

// ======================================================================================
// File: MainActivity.java
// ======================================================================================
package com.example.productdatabase;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
    EditText etProduct;
    ListView listView;
    GridView gridView;
    DatabaseHelper db;
    ArrayList<String> products;
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etProduct = findViewById(R.id.etProduct);
        listView = findViewById(R.id.listView);
        gridView = findViewById(R.id.gridView);
        db = new DatabaseHelper(this);
        showProducts();
    }
    public void addProduct(View view) {
        String product = etProduct.getText().toString();
        if (product.isEmpty()) {
            Toast.makeText(this, "Enter Product Name", Toast.LENGTH_SHORT).show();
            return;
        }
        db.insertProduct(product);
        Toast.makeText(this, "Product Inserted", Toast.LENGTH_SHORT).show();
        etProduct.setText("");
        showProducts();
    }
    private void showProducts() {
        products = new ArrayList<>();
        Cursor cursor = db.getProducts();
        while (cursor.moveToNext()) {
            products.add(cursor.getString(1));
        }
        cursor.close();
        adapter = new ArrayAdapter<>(
                this,
                android.R.layout.simple_list_item_1,
                products
        );
        listView.setAdapter(adapter);
        gridView.setAdapter(adapter);
    }
}

// ======================================================================================
// File: DatabaseHelper.java
// ======================================================================================
package com.example.productdatabase;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(Context context) {
        super(context, "ProductDB", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "CREATE TABLE product(" +
                        "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "name TEXT)"
        );
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS product");
        onCreate(db);
    }
    public void insertProduct(String name) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", name);
        db.insert("product", null, values);
    }
    public Cursor getProducts() {
        SQLiteDatabase db = getReadableDatabase();
        return db.rawQuery(
                "SELECT * FROM product",
                null
        );
    }
}
